特别说明
这里会有一些关于rocketmq的概念引入,希望大家在阅读时,要有一定的rocketmq理解。
生产者
投递消息者 producer 这个与rocketmq相同
消费者
消费消息者 Consumer 这个与rocketmq相同
broker
对应的是kafka里面的一个个部署进程。一般一个节点只会部署一个broker进程。 这个与rocketmq相同。但是kafka没有brokerName的说法,所以kafka只有通过broker来区分。所以可以理解broker只有一个brokerName
注意:kafka的broker没有主broker和从broker的概念
Replica
分区 这个是指相同的数据拷贝到多台机器上。分区分为主分区 和副本分区。在rocketmq对应的是[brokerName相同] 主broker(broker=0)和从broker(broker>0)。
与rocketmq的差别:
1、这个相当于rocketmq每个topic下的队列
2、这里要特别留意kafka topic的两个配置:
partions
主题分区数 。
replication-factor
用来设置主题的副本数。每个主题可以有多个副本,副本位于集群中不同的broker上,也就是说副本的数量不能超过broker的数量,否则创建主题时会失败
每一个分区都有一个broker为leader,它负责该分区内的所有读写操作,其他broker 被动的复制leader broker。如果leader broker 挂了,那么其他broker中的一个将自动成为该分区的新leader。
Replicas: 0,1,2 表示该分区保存在 broker 0 、 broker 1和 broker 2下。
Isr: 0,1,2 表示当前我们可以在 broker 0 、 broker 1和 broker 2 下访问该分区,如果 broker 0挂了,那就像这样子了 Isr: 1,2。
所以kafka的三层消息架构如下:
第一层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。
第二层是分区层,每个分区的 N 个副本中只能有一个充当领导者角色,对外提供服务;
其他 N-1 个副本是追随者副本,只是提供数据冗余之用。
第三层是消息层,分区中包含若干条消息,每条消息的位移从 0 开始,依次递增。
最后,客户端程序只能与分区的领导者副本进行交互。
Log
这个就是消息日志,与rocketmq对应的就是CommitLog。commitLog是由一个个的文件组成,这个文件对应于kafka里面的数据就是 日志段(Log segment).kafka对磁盘压力的回收就是针对日志段进行的。
消费位移
Consumer Offset。表示消费者消费进度,每个消费者都有自己的消费者位移。
各个术语的展示图
位移保存实现不一样
rocketmq是使用文件保存
kafka是还是使用自己的topic去保存。
Controller broker
controller broker 作用类似于rocketmq的nameServer ,但是它不是像nameServer独立一个进程存在,而是在broker中存在。集群中只会有一个Controller broker