kafka中组和分区的区别和联系(九)

组这个也就是group.id是从消费者的角度看的
分区是对主题(topic)而言的,对生产者和消费者都有很大的关系,当然最麻烦的是消费者
我感觉特别有必要整理整理这方面的思路,要不又要把我绕进去

在生产者角度的分区

这个是最简单理解的,哈哈

在创建主题的时候我们会选择创建几个备份,几个分区,在这说一下分区,关于备份节点如果学到这还不懂那你可以放弃了。

(1)直接上图

一个主题单个分区
kafka中组和分区的区别和联系(九)_第1张图片
生产者生产的消息直接发送到唯一的分区

一个主题多个分区

和上面图不一样的两个关键点:
1,生产者的箭头不是直接指向分区的:因为先要知道你是哪个分区才能往分区里送
2,连接线长有分区和key:这是生产者指定分区发送或者指定key进行hash(key)运算发送到哪个分区,或者kafka随机分配

kafka中组和分区的区别和联系(九)_第2张图片
其实上面两个图就是一个,因为只有一个分区,你指定key或者分区也没用,还是往那个唯一的分区里发送消息
注意:发送的消息是往一个分区里发,就是如果分区一有消息了,其他分区就没有此消息,消费者去有消息的分区去接收

而对于分区里面的省略了,下面给的这张图是分区主题里分区的布置,这也是备份的设置,其实备份就是把主题里Leader里的信息备份到follower中,这样就会有相同的信息,日志等等
kafka中组和分区的区别和联系(九)_第3张图片
这里都以分区1、2来统一概括了上面Leaderfollower,这样画的简单些

消费者角度的分区

你是否想过Leade节点,备份节点能构成一个思维导图,但是又出现消费者和group.id来给消费者分组又构成一个思维导图,那这两个又是怎么联系起来的呢?

第一种情况,集群中所有的消费者都是单独的组

可能你会问,为什么不单独分一个区或者多个区,我想说没必要

kafka中组和分区的区别和联系(九)_第4张图片
上面这幅图形象的描述了当每个消费者单独一个组时,那这个消费者将接收主题所有分区的消息,

第二种情况,集群中所有的消费者不全是单独的组

有的消费者组里只有一个,有的有多个
这以一个组里有一个,和一个组里有两个的消费者举例

kafka中组和分区的区别和联系(九)_第5张图片
可能会说右边这个组里怎么消息是给的组呢,而不是直接给消费者呢?
因为不清楚怎么你是怎么分配的,有很多的分配方法,默认的,自己定义的…
例如: 分区1给消费者2,分区2给消费者3
kafka中组和分区的区别和联系(九)_第6张图片
例如: 分区1和分区2都给消费者2
kafka中组和分区的区别和联系(九)_第7张图片
还有一种就不画了,就是上图中消费者2的箭头都指向了消费者3
这是三种分配只有第一种推荐
第二种和第三种让消费者3或者消费者2荒废了,不推荐

这你就可能有疑问了,为什么不能分区1,2都分别给消费者2,3呢,而只能选一个?
这就是消费者分组的作用,上面你可以看到那些有颜色的线可以认为是消息队列组内成员对于来自一个分区的消息队列只能组内一个成员消费,消费完就没了,其他成员是没办法消费被同组内成员消费消息的

这就是我的理解,如果有什么不对的地方请告诉我一声,我一定修改过来

你可能感兴趣的:(kafka)