apache-kafka - Kafka,控制其他分区偏移量
问题描述
我有一个 Kafka 主题和两个消费组,每个消费组都在使用该主题。
一组服务使用消费者组 A 消费主题,另一组服务使用消费者组 B 消费主题。
通常,消费者组 A 比组 B 更快地处理事件。
我想防止 A 组中的消费者比 B 组中的消费者领先太多。
有没有办法做到这一点?
如果 B 组落后太远,我是否可以减慢 A 组的消耗,或者我可以让 B 组使用 Kafka 以任何方式控制 A 组的偏移量。
(消费者服务 b 速度慢的原因有两点,供应量少,它使用的后端速度较慢)
解决方案
如果 B 组落后太远,我可以减慢 A 组的消费吗
如果您可以访问 B 组的位置,那么您可以避免调用poll
A 组的消费者,直到 B 组赶上(如果您使用某种厚包装,如 spring-kafka,您可能需要停止并重新创建您的侦听器)。
根据组在保存偏移量方面的配置方式,另一个组也可以通过读取内部 __consumer_offsets
主题来访问组的位置(您可能想bin/kafka-consumer-groups.sh
从服务器目录中查看如何做到这一点)。
我可以让 B 组以任何方式控制 A 组的偏移量吗
并不真地。您可以写入以__consumer_offsets
更改组 A 的偏移量,但该值仅在重新创建消费者时读取,而不是在它仍在运行时读取。基本上,如果您想要这种级别的通信,您需要编写自己的代码,使 Group-B-service 与 Group-A-service 通信,以通过seek
.
一般来说,关键是——如果消费者已经在运行——那么就没有通信,除非你创造了一些东西。
推荐阅读
- gitlab - GitLab CI - 文件内容更改时运行管道
- java - “创建 Java 虚拟机失败”
- react-testing-library - 如何使用 react-testing-library 检查元素是否以特定排序呈现?
- angular - 将我的 Angular 5 应用程序部署到 Heroku 时出现问题
- django - 为什么当前用户没有被传递给我的模板?
- android - 使用 Android Studio 从 firestore 获取数组值
- svg - 根据内部的 png/jpeg 图像调整 SVG 元素的大小
- ruby-on-rails - 处理 cocoapods 时 Mac 上的 ruby 损坏
- c - 为什么在后台线程中写入我的日志文件失败
- php - Laravel 在分块后存储数据