Apache kafka 卡夫卡,控制其他分区偏移

Apache kafka 卡夫卡,控制其他分区偏移,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我有一个卡夫卡主题和两个消费群体,每个消费群体消费一个主题 一组服务使用消费者组A消费主题,另一组服务使用消费者组B消费主题 通常,消费者组A处理事件的速度比组B快得多 我想防止A组的消费者远远超过B组的消费者 有办法做到这一点吗 如果B组落后太多,我是否可以降低A组的消耗,或者我是否可以让B组使用卡夫卡以任何方式控制A组的偏移量 (消费者服务b速度缓慢的原因有两个,一是供应量减少,二是它使用的后端速度较慢) 如果B组落后太多,我是否可以减缓A组的消费 如果您可以访问B组的位置,那么您可以避免在

我有一个卡夫卡主题和两个消费群体,每个消费群体消费一个主题

一组服务使用消费者组A消费主题,另一组服务使用消费者组B消费主题

通常,消费者组A处理事件的速度比组B快得多

我想防止A组的消费者远远超过B组的消费者

有办法做到这一点吗

如果B组落后太多,我是否可以降低A组的消耗,或者我是否可以让B组使用卡夫卡以任何方式控制A组的偏移量

(消费者服务b速度缓慢的原因有两个,一是供应量减少,二是它使用的后端速度较慢)

如果B组落后太多,我是否可以减缓A组的消费

如果您可以访问B组的位置,那么您可以避免在A组的消费者中调用
poll
,直到B组赶上(如果您使用的是像spring kafka这样的厚包装,您可能需要停止并重新创建侦听器)

根据组在保存偏移量方面的配置方式,另一个组也可以通过读取内部
\uu consumer\u offsets
主题(您可能希望查看服务器目录中的
bin/kafka consumer groups.sh
如何执行此操作)来访问组的位置

我可以让B组以任何方式控制A组的偏移量吗

不是真的。您可以写入
\u消费者\u偏移量
以更改组A的偏移量,但该值将仅在消费者重新创建时读取,而不是在消费者仍在运行时读取。基本上,如果您需要这种级别的通信,您需要编写自己的代码,使Group-B-service与Group-A-service通信,以通过
seek
更改其偏移量


一般来说,问题是,如果消费者已经在运行,那么就没有交流,除非你创造了一些东西。

好帖子谢谢,但在你的第一点上,如果我避免在A组的消费者中调用poll,这些消费者会被踢出并重新平衡吗?或者在阻止调用轮询时会产生其他负面影响?是的,您可能需要查看
max.poll.interval.ms
属性-它控制消费者可能不轮询的时间。或者(这是一个黑客),您可以定期执行类似
poll()的操作;寻找(以前的职位);commit(previous position)
所以轮询发生了,只是数据被拒绝了——但这并不漂亮。