首页 > 解决方案 > Kafka,控制其他分区偏移量

问题描述

我有一个 Kafka 主题和两个消费组,每个消费组都在使用该主题。

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

通常,消费者组 A 比组 B 更快地处理事件。

我想防止 A 组中的消费者比 B 组中的消费者领先太多。

有没有办法做到这一点?

如果 B 组落后太远,我是否可以减慢 A 组的消耗,或者我可以让 B 组使用 Kafka 以任何方式控制 A 组的偏移量。

(消费者服务 b 速度慢的原因有两点,供应量少,它使用的后端速度较慢)

标签: apache-kafkakafka-consumer-api

解决方案


如果 B 组落后太远,我可以减慢 A 组的消费吗

如果您可以访问 B 组的位置,那么您可以避免调用pollA 组的消费者,直到 B 组赶上(如果您使用某种厚包装,如 spring-kafka,您可能需要停止并重新创建您的侦听器)。

根据组在保存偏移量方面的配置方式,另一个组也可以通过读取内部 __consumer_offsets主题来访问组的位置(您可能想bin/kafka-consumer-groups.sh从服务器目录中查看如何做到这一点)。

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

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

一般来说,关键是——如果消费者已经在运行——那么就没有通信,除非你创造了一些东西。


推荐阅读