Kafka(1)消息中间件、消息队列、kafka消息队列中间件

tech2022-08-12  151

在介绍什么消息中间件之前,先介绍几个概念: 一、什么是消息#   消息是指软件对象之间进行交互作用和通讯利用的一种方式。

二、什么是中间件 非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件统称为中间件

三、什么是消息队列 消息队列是消息中间件的一种实现方式。

四、什么是消息中间件 关注于数据的发送和接受,利用高效可靠的异步消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。 这可能比较抽象,既然消息队列是实现消息中间件的一种方式,不如我们从它的实际应用场景中,来进一步理解它,消息队列的应用场景主要有一下几个方面:

1) 异步处理2) 应用解耦-3) 流量削峰

常见的消息中间件(MQ:Message Queuing)(这里只介绍我们大数据接触得比较多的) 1) RabbitMQ   使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP,STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了Broker架构,核心思想是生产者不会将消息直接发送给队列,消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)、数据持久化都有很好的支持。多用于进行企业级的ESB整合。

2)Redis: 使用C语言开发的一个Key-Value的NoSQL数据库,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。 补充:Redis与RabbitMQ的比较:  入队:数据大小<10K时,Redis的性能要高于RabbitMQ,数据大于10K时,RabbitMQ更胜一筹  出队:无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。

3) Kafka   使用scala实现的一个高性能分布式Publish/Subscribe消息队列系统,具有以下特性:  a、快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行消息持久化;  b、高吞吐:在一台普通的服务器上既可以达到10W/s的吞吐速率;  c、高堆积:支持topic下消费者较长时间离线,消息堆积量大;  d、完全的分布式系统:Broker、Producer、Consumer都原生自动支持分布式,依赖zookeeper自动实现复杂均衡;  e、支持Hadoop数据并行加载:对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。

深入理解消息队列:

消息队列的传递模型一共有两种形式: 点对点(PTP) 点对点模型的特点:

1,每个消息只有一个消费者

2,发送者和接受者没有时间依赖

3,接受者确认消息接受和处理成功

发布-订阅(Pub/Sub) 发布/ 订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进

行接收。

发布-订阅模型特点:

1,每个次消息可以有多个消费者

2,客户只有订阅后才能接收消息(只有建立订阅关系才可以接收消息 )

3,持久订阅和非持久订阅

持久订阅 订阅关系建立后(关系保存在消息中间件中),不管消费者(也就是订阅者)是否在线消息都不会消失。

非持久订阅 建立一种类似长连接关系式的订阅模式,订阅者为了接收消息必须保持一直连接的状态,如果断开连接则丢失消息。

消息队列的分类:

消息队列的应用案例:

不做赘述,这里主要为了引入kafka是一个消息队列中间件,想进一步了解消息中间件,推荐一下两篇文章

https://www.cnblogs.com/lifeibai/p/9167701.html

https://www.cnblogs.com/lifeibai/p/9167701.html

最新回复(0)