我有一个Kafka主题和两个消费群体,每个消费群体都消费一个主题。
一堆服务使用消费者组A消费主题,另一束服务使用消费者组B消费主题。
通常,消费者A组比B组更快地处理事件。
我想防止A组中的消费者领先B组中的消费者。
有没有办法做到这一点?
如果B组落后太久,我可以减慢A组的消耗吗?还是可以使用Kafka让B组以任何方式控制A组的偏移量。
(消费者服务b变慢的原因有两点,供应少,后端使用的速度慢)
答案 0 :(得分:1)
如果B组落后太久,我是否可以减慢A组的消费量
如果您有权访问B组的职位,则可以避免在B组追赶之前避免在A组的使用者中调用poll
(如果您使用的是Spring-kafka等厚包装,则可能需要停止并重新创建您的听众)。
根据如何配置组以节省偏移量,另一个组还可以通过读取内部 __consumer_offsets
主题来访问组的位置(您可能想了解bin/kafka-consumer-groups.sh
的方式从服务器目录执行此操作。
我可以让B组以任何方式控制A组的偏移量
不是。您可以写入__consumer_offsets
来更改组A的偏移量,但是该值仅在重新创建使用者时才读取,而在其仍在运行时则不。基本上,如果您想要这种级别的通信,则需要编写自己的代码,以使Group-B-service与Group-A-service进行通信,以通过seek
更改其偏移量。
总的来说,要点是-如果使用者已经在运行-除非您创建了东西,否则就没有通信。