confluent_kafka消费者补偿计数重置问题

时间:2018-09-25 06:29:13

标签: python apache-kafka kafka-consumer-api confluent-kafka

说明

我一直在尝试测试发送给Kafka的大量数据的正确性。当我尝试在结构中使用多处理时,我弄乱了流程以及消息使用者。最初,消息使用者没有被正确关闭,然后不再停止使用消息。

然后,我在本地计算机上重新启动Kafka(我使用docker,所以我使用了

docker-compose -f docker-compose-single-broker.yml rm

删除我一直在测试的kafka, 并使用

重新创建了一个新的

docker-compose -f dokcer-compose-single-broker.yml up

kafka和kafka-manager启动并运行后,我发现尽管没有任何消息传输到kafka,但我用来测试的主题的偏移值并未重置为0。 image 对于图片中的数据,

“网关”是我重新启动kafka之前和之后一直在使用的消费者。

“ gateway_tester”是我用来发送测试消息的主题。

“ End 54”(红色值)是我重新启动kafka之后从该主题消耗的数据数量。

“偏移899”(蓝色值)是我重新启动kafka之前从该主题消耗的数据数量。

我很困惑为什么我重新启动kafka后没有重置偏移量数字。

重新启动kafka后使用此使用者时,它将使用我发送给kafka的所有数据,因为数据数量少于899 ...

然后,我创建了一个名为“ gateway_2”的新使用者,以使用来自同一主题的数据。 image

如图所示,这次偏移计数与End值匹配。而且一切正常。如果我将数据发送到该主题并尝试使用此新使用者“ gateway_2”来使用数据,它将使用我发送给该主题的新消息,并且它将忽略以前使用过的消息。 (我的偏移量设置为'auto.offset.reset': 'smallest'

我想知道,是否有一种方法可以重置我以前使用的使用者的偏移计数?或者解决此问题的唯一方法是创建新消费者。

复制

1)启动kafka,创建一个使用者并使用一些数据来更改该使用者的偏移计数。

2)关闭卡夫卡。

3)重新启动kafka并使用相同的消费者对消费者消息。

4)使用者将消耗主题中的所有数据,直到某个主题中的数据量达到偏移量计数为止。

配置

  • confluent-kafka-python和librdkafka版本:confluent_kafka.version(0.11.4) kafka-python(1.3.5)(我找不到confluent_kafka.libversion(),因为我正在研究的项目使用pip来管理python软件包和confluent_kafka.libversion没有显示在requirements.txt文件上...)

  • Apache Kafka代理版本:0.9.0.1

  • 客户端配置:

    KAFKA_HOST = '0.0.0.0'

    KAFKA_PORT = 9092

    KAFKA_HOST_PORT = '%(host)s:%(port)s' % { 'host': KAFKA_HOST, 'port': KAFKA_PORT, }

    kafka_configuration = { 'bootstrap.servers': KAFKA_HOST_PORT, 'session.timeout.ms': 6000, 'default.topic.config': {'auto.offset.reset': 'smallest'}, }

(我在类初始化程序中用值group.idgateway(对于新使用者)更新了gateway_2

  • 操作系统:macOS 10.13.6

2 个答案:

答案 0 :(得分:0)

'auto.offset.reset': 'smallest'表示如果没有偏移量信息,则偏移量将设置为可用的最小值。

一旦您消费了来自kafka的消息,则已经有偏移量信息,偏移量将不是最小的。当您重新启动kafka Consumer时,它将使用您上次停止处的消息。

也许您可以尝试将enable.auto.commit设置为false,这将禁用自动偏移量提交,如果它不起作用,那么您可能需要在每次重新启动使用方时都将偏移量设置为最小值,如果您愿意使用从最早的消息开始。

答案 1 :(得分:0)

我也将此问题作为问题发布在confluent-kafka-python的github页面上。 我的问题已由贡献者解决。

以下是问题的链接: https://github.com/confluentinc/confluent-kafka-python/issues/455

总而言之,贡献者@rnpridgeon说:“仅重启经纪商不足以消除抵消。您将需要删除后备卷,以及它存储的__consumer_offsets主题的内容,该主题存储您的消费者组偏移量。'

之后,我检查了docker文档(https://docs.docker.com/compose/reference/rm/)并找到了我的命令 docker-compose -f docker-compose-single-broker.yml rm不足以删除附加到容器的匿名卷。

相反,我应该使用命令 docker-compose -f docker-compose-single-broker.yml rm -v

然后我的问题得到解决,使用上述命令重新启动kafka后,偏移值被重置。

Offset on that consumer get reset!