聊一下kafka的消费组

简介: 消费组使kafka中很重的概念,只有弄清楚消费组的概念,才能在项目中把它运用好,在kafka中,每个消费者都对应一个消费组,消费者可以是一个线程,一个进程,一个服务实例,如果kafka想要消费消息,那么需要指定消费那个topic的消息以及自己的消费组id(groupId),也可以直接指定那个主题的哪些分区,不然无法消费消息,消费组是一个逻辑上的概念,如下图是主题,分区,消费组,消费者的关系图。

介绍


消费组使kafka中很重的概念,只有弄清楚消费组的概念,才能在项目中把它运用好,在kafka中,每个消费者都对应一个消费组,消费者可以是一个线程,一个进程,一个服务实例,如果kafka想要消费消息,那么需要指定消费那个topic的消息以及自己的消费组id(groupId),也可以直接指定那个主题的哪些分区,不然无法消费消息,消费组是一个逻辑上的概念,如下图是主题,分区,消费组,消费者的关系图。



从上图看出都两个消费组,分别为消费组a和消费组b,消费组a有三个消费者c1,c2,c3,其中c1消费分区1,c2消费分区2,c3消费分区3和分区4,消费组b有c4和恶c5两个消费者,c4消费分区1和分区2,c5消费分区3和分区4,我们可以看出,一个消费组内的消费者可以同时消费一个或者几个分区,反之,一个分区只能被同一个消费组内的消费者消费


消费组增加消费者


此时我们在消费组a中添加了一个消费者c6,我们看到,原来的c3消费分区3和分区4,现在c3只消费分区4,把分区4让给了c6去消费,由此可以看出kafka会使消费者平均消费分区。


继续在消费组a中增加一个消费者c7,如下图,那么由于消费组a中的每个消费者都订阅了一个分区,因为秉承一个分区只能被同一个消费组内的一个消费者消费的原则,四个分区刚好对应4个消费者,所以c7消费者就只能空闲下来。


消费模式


从上面的消费组的一些介绍,我们就可以引申出消息中间件的消费模式,我们知道消息中间件的消费模式有发布订阅模式点对点模式,在不同的场景下使用的消费模式也不一样,这样根据我们的业务需求去选择,下面我们消息介绍一下这两种模式。


发布订阅模式


发布订阅模式顾名思义就是生产者发布消息以后,消费者订阅对应的主题分区,然后进行消费,它是一对多的,就像学校的在广播里面通知,所有的学生都能听到,还有微信的订阅号,一个订阅号会有很多人关注,当订阅号的号主发布一篇文章,关注的人都能收到。


那么在kafka中,怎么做发布订阅模式呢?很简单,就是不同的消费组就能实现发布订阅模式,在上面我们说了一个分区只能被同一个消费组内的消费者消费,那么我们使用不同的消费组的消费者消费同一个分区就行了,这就实现了发布订阅模式,如下图,有三个消费组a,b,c的消费者c1,c2,c3消费同一个分区,在kafka中使用groupId来表示消费组,如果所有的消费者的groupId都设置一样,那么他们就属于同一个消费组。




发布订阅模式的应用场景有很多,比如下游有很多服务都需要使用同一份数据,如果通过编码的方式来实现的话,可以通过RPC方式来调用,但是就会造成系统的耦合,使用消息中间件的话,上游只管投递消息,下游服务订阅后,就可以消费到消息,大大降低了耦合。


点对点模式


点对点模式就是一对一模式,现实生活中我们打电话,私聊都属于点对点模式,在kafka中要使用点对点模式,那么我们还是要回到一个分区只能被同一个消费组内的消费者消费这个问题,那么我们就创建一个消费组,每个分区的数据只能被这个消费组内的消费者消息,就实现了点对点模式。



点对点的应用场景也很多,因为它的数据只能被一个消费者使用,比如可以削峰,比如上游服务发送了很多数据过来,如果下游服务的就只有一个消费者实例,那么就可能造成消息的积压,这时候就可以多开几个消费者实例一起消费,就加快了消息的消费速度,不过也得考虑一些因素,比如消息的顺序。


总结


上面对消费组和消费者进行了详细的图文介绍,也引申出了消费模式的发布订阅模式,点对点模式,并说了一些应用场景,在实际使用的时候,我们需要根据自己的业务去衡量需要多少消费者,消费者与主题分区之间的数量规划等等,对于kafka的参数调优啊,消息的顺序消费,消息的丢失,重复消费等问题,后续我们再继续。


感谢你的观看,我们下期见,如果文中有说得不合理或者不正确的地方,希望你能进行指点!



目录
相关文章
|
2月前
|
消息中间件 负载均衡 Kafka
【Kafka面试演练】那Kafka消费者手动提交、自动提交有什么区别?
嗯嗯Ok。分区的作用主要就是为了提高Kafka处理消息吞吐量。每一个topic会被分为多个分区。假如同一个topic下有n个分区、n个消费者,这样的话每个分区就会发送消息给对应的一个消费者,这样n个消费者负载均衡地处理消息。同时生产者会发送消息给不同分区,每个分区分给不同的brocker处理,让集群平坦压力,这样大大提高了Kafka的吞吐量。面试官思考中…
72 4
|
29天前
|
消息中间件 负载均衡 Java
【Kafka】Kafka 中消费者与消费者组的关系与负载均衡实现
【4月更文挑战第11天】【Kafka】Kafka 中消费者与消费者组的关系与负载均衡实现
|
4月前
|
消息中间件 存储 负载均衡
Kafka - 3.x Kafka消费者不完全指北
Kafka - 3.x Kafka消费者不完全指北
54 0
|
5月前
|
消息中间件 算法 Kafka
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
137 0
|
7月前
|
消息中间件 存储 算法
MQ - 闲聊MQ一二事儿 (Kafka、RocketMQ 、Pulsar )
MQ - 闲聊MQ一二事儿 (Kafka、RocketMQ 、Pulsar )
178 0
|
7月前
|
消息中间件 Arthas 监控
Topic太多!RocketMQ炸了!
Topic太多!RocketMQ炸了!
77 0
|
11月前
|
消息中间件 算法 Kafka
【Kafka从入门到放弃系列 五】Kafka架构深入——消费者策略
【Kafka从入门到放弃系列 五】Kafka架构深入——消费者策略
133 0
【Kafka从入门到放弃系列 五】Kafka架构深入——消费者策略
|
消息中间件 缓存 Kafka
阿里四面:kafka何时、如何删除Topic?
Kafka有很多状态机和管理器,如Controller通道管理器ControllerChannelManager、处理Controller事件的ControllerEventManager等。这些管理器和状态机,大多与各自“宿主”联系密切。就如Controller这俩管理器,必须与Controller组件紧耦合,才能实现各自功能。
116 0
|
消息中间件 存储 缓存
消息队列之推还是拉,RocketMQ 和 Kafka 是如何做的?(上)
消息队列之推还是拉,RocketMQ 和 Kafka 是如何做的?(上)
消息队列之推还是拉,RocketMQ 和 Kafka 是如何做的?(上)
|
消息中间件 网络协议 Java
【Kafka从入门到成神系列 六】Kafka 消费组及重平衡
【Kafka从入门到成神系列 六】Kafka 消费组及重平衡
【Kafka从入门到成神系列 六】Kafka 消费组及重平衡