![](/img/trans.png)
[英]Waiting for every to connect to a topic with new consumer group in kafka (node-rdkafka)
[英]Setting an initial “current-offset” and “lag” for new consumer groups for a given topic
我正在开发一种可能会根据用户使用产品的方式添加/删除消费者群体的产品。
在我们的产品中, enable.auto.commit
已关闭, enable.auto.commit
是,每次收到数据后我们都会提交偏移量。
我们最近实施了一项将暂停/恢复该产品的服务。 kafka库(位于NodeJS中 )尚没有可用的暂停/恢复功能,因此我最终根据消费者消费者组退订/订阅了该主题,这似乎按我们的预期工作。
唯一的问题是在添加新的使用者组时发生的。 首先,让我解释一下我所看到的行为:
这是消费者“ group1”信息。
$ bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group philz-topic-group1
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
philz-topic 1 33 33 0 rdkafka-3ac4d56e-e94b-4365-9af7-04e485502b5d /10.233.113.109 rdkafka
philz-topic 4 34 34 0 rdkafka-d642805c-f5ea-4450-9cb0-3272fcbbffc9 /10.233.88.251 rdkafka
philz-topic 0 23 23 0 rdkafka-12cfca8b-fd61-4a68-bc5f-1946c8ef4eb1 /10.233.120.55 rdkafka
philz-topic 2 26 26 0 rdkafka-7561ca2a-9894-4a3d-83fe-d379bbe64fdf /10.233.126.40 rdkafka
philz-topic 3 20 20 0 rdkafka-cd9d5ed6-7daa-4b75-8f39-6704c8d887ed /10.233.119.133 rdkafka
这是使用者“ group2”的信息。使用者“ group2”刚刚添加并完成了一个操作。 因此,单个操作的CURRENT-OFFSET和LAG已更新。
$ bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group philz-topic-group2
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
philz-topic 3 - 20 - rdkafka-b56306e1-b4b7-43fe-a604-ab7c12f70e9f /10.233.119.133 rdkafka
philz-topic 1 - 33 - rdkafka-76c9a4d2-268b-4ebb-94a8-f1230c9bbfea /10.233.113.109 rdkafka
philz-topic 4 34 34 0 rdkafka-d412e574-8241-48c6-af26-c50be44eb51d /10.233.126.40 rdkafka
philz-topic 0 - 23 - rdkafka-33179a7d-cb9f-453a-83c6-e7e4780372b6 /10.233.88.251 rdkafka
philz-topic 2 - 26 - rdkafka-77506e87-b666-4c92-82df-82071e2ff801 /10.233.120.55 rdkafka
如果添加了新的使用者组并且没有完成任何操作,则上述命令不会显示有关该使用者组的信息。
我当前面临的问题是,当发生暂停/恢复操作并且使用者组的所有分区都没有更新的CURRENT-OFFSET和LAG时,取消订阅/暂停并完成操作时,分区应具有以下LAG:现在1。 但是,如果新的消费者组在给定分区上没有任何先前的CURRENT-OFFSET和LAG,则该信息现在将被跳过,并且消费者组永远不会看到。
我的问题是,在创建新的使用者组时,是否可以为该组更新CURRENT-OFFSET以匹配所有可用分区的LOG-END-OFFSET?
我对Kafka并不超级熟悉,因此可以对此处的行为做出任何解释。
我的猜测是,因为我们自己提交了偏移量(由于enable.auto.commit
被关闭),所以当一项操作发生时,我们能够看到有关新使用者组的一些信息,但是只能看到一个分区(刚刚收到的一个分区)。数据)显示并使用当前偏移量进行更新。
谢谢!
编辑:
另外,在我的示例中,每个使用者组有5个使用者,并且有5个分区,因此每个分区应该有一个使用者
感谢cricket_007提供了执行此操作所需的kafka消费者选项
使用者选项auto.offset.reset
允许在实例化时自动设置使用者偏移。 通过将此选项的值设置为“最早”,它将把每个分区的当前偏移量设置为LOG-END-OFFSET
。
为了使用节点库设置此选项,只需:
const consumer = new Kafka.KafkaConsumer(config, {
'auto.offset.reset': 'earliest'
});
其中config
是使用者的键/值对配置,第二个参数是用于创建默认主题配置的键/值对配置。
该配置是在使用者上设置的主题级别配置,如此处所述: https : //github.com/edenhill/librdkafka/blob/0.11.1.x/CONFIGURATION.md
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.