kafka中组和分区的区别和联系(九)
组这个也就是
group.id
是从消费者的角度看的
分区是对主题(topic)而言的,对生产者和消费者都有很大的关系,当然最麻烦的是消费者
我感觉特别有必要整理整理这方面的思路,要不又要把我绕进去
在生产者角度的分区
这个是最简单理解的,哈哈
在创建主题的时候我们会选择创建几个备份,几个分区,在这说一下分区,关于备份节点如果学到这还不懂那你可以放弃了。
(1)直接上图
一个主题单个分区
生产者生产的消息直接发送到唯一的分区
一个主题多个分区
和上面图不一样的两个关键点:
1,生产者的箭头不是直接指向分区的:因为先要知道你是哪个分区才能往分区里送
2,连接线长有分区和key:这是生产者指定分区发送或者指定key进行hash(key)运算发送到哪个分区,或者kafka随机分配
其实上面两个图就是一个,因为只有一个分区,你指定key或者分区也没用,还是往那个唯一的分区里发送消息
注意:发送的消息是往一个分区里发,就是如果分区一有消息了,其他分区就没有此消息,消费者去有消息的分区去接收
消费者角度的分区
你是否想过Leade节点,备份节点能构成一个思维导图,但是又出现消费者和
group.id
来给消费者分组又构成一个思维导图,那这两个又是怎么联系起来的呢?
第一种情况,集群中所有的消费者都是单独的组
可能你会问,为什么不单独分一个区或者多个区,我想说没必要
上面这幅图形象的描述了当每个消费者是单独的一个组时,那这个消费者将接收主题里所有分区的消息,而每个消费者下面的标注会让大家更加理解Leader,备份节点和消费者的关系
其实我更喜欢下面这张图
因为都知道kafka里只有Leader进行读写,就算你通过备份节点的IP:端口进入也还是会传送到Leader的节点
第二种情况,集群中所有的消费者不全是单独的组
有的消费者组里只有一个,有的有多个
这以一个组里有一个,和一个组里有两个的消费者举例
可能会说右边这个组里怎么消息是给的组呢,而不是直接给消费者呢?
因为不清楚怎么你是怎么分配的,有很多的分配方法,默认的,自己定义的…
例如: 分区1给消费者2,分区2给消费者3
例如: 分区1和分区2都给消费者2
还有一种就不画了,你肯定也知道,
这是三种分配只有第一种推荐,
第二种和第三种让消费者3或者消费者2荒废了,不推荐
这你就可能有疑问了,为什么不能分区1,2都分别给消费者2,3呢,而只能选一个?
这就是消费者分组的作用,上面你可以看到那些有颜色的线可以认为是消息队列,组内成员对于来自一个分区的消息队列只能由组内一个成员消费,消费完就没了,其他成员是没办法消费被同组内成员消费消息的
这就是我的理解,如果有什么不对的地方请告诉我一声,我一定修改过来