我一直在尝试测试发送给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。 对于图片中的数据,
“网关”是我重新启动kafka之前和之后一直在使用的消费者。
“ gateway_tester”是我用来发送测试消息的主题。
“ End 54”(红色值)是我重新启动kafka之后从该主题消耗的数据数量。
“偏移899”(蓝色值)是我重新启动kafka之前从该主题消耗的数据数量。
我很困惑为什么我重新启动kafka后没有重置偏移量数字。
重新启动kafka后使用此使用者时,它将使用我发送给kafka的所有数据,因为数据数量少于899 ...
然后,我创建了一个名为“ gateway_2”的新使用者,以使用来自同一主题的数据。
如图所示,这次偏移计数与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.id
和gateway
(对于新使用者)更新了gateway_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后,偏移值被重置。