【kafka】多节点服务监听同个topic,但消息始终只落在一个服务上

问题描述

如题,就是同一个topic,同一个服务,起了3个节点。
预期就是这三个节点(同个镜像),可以相对均衡地消费这个topic上的数据,以提升这个消费的速度。

但让人迷惑的事情就是,为什么始终只有一个服务监听到数据,另外两个服务始终监听不到数据呢?
把正常的这个停掉报,才会从剩下的两个服务中选一个来进行消费数据(说明之前这三个服务其实本来都能够正常消费数据的),但是当他们都启动的时候,消息始终只落在一个服务上,另外两个服务虽然正常启动,但就是不消费数据。那这样搞法,数据消费的性能上根本没有任何的提升啊!

咋玩?

后来,回想一下kafka分组 group 和 kafka分区,多个消费者消费数据的情况。。貌似突然想到了一个事情!

这个topic 该不会只有一个分区吧????!!!!!

image

就是这个图。

比如,现在起的3个节点的服务,是同一个GROUP A,
然后kafka集群,它是SERVER 1, 然后呢,它一开始只有一个分区。
注意:对于一个消费者组,同一个分区的数据,只会由一个消费者去消费。即使这个消费者组下面有10消费者都好,这个TOPIC的分区,只会有一个消费者对对应。
对应到这个图,意思就是 C1 和 C2 是不会同步消费P0 的数据的。 P0 只能被 GROUP A 的C1 或者 C2 消费。

突然懂了。

动手!把这个TOPIC的分区数改为3,
emmmmm 再把服务重启一下,emmmmm, NICE, 好了! 每个消费者都能取到数据了,算是比较均衡地消费了,也符合了预期。

posted @ 2024-01-20 23:43  aaacarrot  阅读(43)  评论(0编辑  收藏  举报