消息队列mq的两种模式

kafka架构组件概念详解:Broker、Topic、Partition、Leader/Follower、Consumer Group、zookeeper_后台编程
发布订阅模式分为两种:①队列推送数据(消费者能力不平均);②消费者拉取消息(要维护一个长轮询)。kafka属于消费者主动拉取数据的模式。
kafka架构组件概念详解:Broker、Topic、Partition、Leader/Follower、Consumer Group、zookeeper_后台编程_02

kafka架构

kafka架构组件概念详解:Broker、Topic、Partition、Leader/Follower、Consumer Group、zookeeper_后台编程_03
kafka架构组件概念详解:Broker、Topic、Partition、Leader/Follower、Consumer Group、zookeeper_后台编程_04
kafka架构组件概念详解:Broker、Topic、Partition、Leader/Follower、Consumer Group、zookeeper_后台编程_05

Broker

kafka服务器。

Topic主题

不同消息的分类。将消费分类。topic包含多个partition,partition有leader和follower备份机制,leader挂掉follower会上升为leader。

Partition分区

分区是为了提高主题Topic的负载能力。消息会轮询发送到同一Topic主题在不同Broker中的不同Partition分区中。

Leader副本

消费者一定会找leader进行通信。对分区中的消息进行副本备份。就是对数据进行冗余。同一主题的同一分区的leader和follower一定不在同一台机器上。

Follower副本

当leader挂掉后,follower会提升为leader的角色。

Consumer Group消费者组

一个partition分区中的消息只能被某一个消费者组中的一个消费者消费。这样设计的目的是为了提高消费者组的并发度。
当一个消费者组中的消费者个数与主题的分区数一致时才最合理,如果消费者个数过多就造成了性能浪费。

zookeeper

①zk的主要作用是帮助kafka集群存储一些信息;
②帮助消费者存储消费到的位置信息。

(在kafka0.9版本之前offset消费到的消息的偏移量是存储在zk中,0.9版本及以后offset存在kafka本地的系统topic中,无论是存储在哪都是为了记录消费位置,以便集群宕掉后重启能继续原来的位置接着消费,zk虽然可以用来存储数据,但是它并不是存储数据的首选方案,如果存储在zk中,消费者会频繁地从zk中拉取消息,背离了zk的设计初衷)

消息有效期

kafka的消息数据存储在磁盘中,默认有效期是7天,如果存储在内存中不宜保期这么久。