用例
我为卡夫卡消费集团补偿(https://github.com/cloudworkz/kafka-minion)写了一个prometheus出口商,它通过使用内部__consumer_offsets主题来工作。本主题中所有消息的键和值都是二进制的,我能够对它们进行解码。当任何组偏移到期时,Kafka应该为该键创建一个墓碑(由组id、主题名称和分区id组成)。
问题
到目前为止,这种方法非常有效,但是Kafka显然没有为一些过期的偏移/组提供墓碑。我使用以下命令讨论了偏移主题:
kafka-console-consumer.sh --from-beginning --topic __consumer_offsets zookeeper.connect=${ZOO_HOST} --bootstrap-server="${KAFKA_HOST}" --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter这会产生格式化的日志行,其中包含偏移量提交以及它们的组名、partitionID和提交时间戳。它还将打印墓碑(空值)。还有一些消费者群体补偿,他们仍然没有墓碑,即使他们的补偿已经实行了6个月前(抵消保留设置为2w)。当我列出来自Kafka (使用其他shell脚本)的消费者组时,Kafka也没有列出这个消费群体--因此内部Kafka显然意识到这些抵消是过期的。
问题
为什么卡夫卡有时不为过期的补偿生产墓碑?卡夫卡是如何知道这些抵消是过期的,当它显然不依赖于接收墓碑过期的组偏移?
发布于 2019-12-27 23:32:24
过期的记录不会被删除:文件段只是从磁盘中删除。
听起来,您在应用程序中维护状态,而在您所消耗的记录上没有TTL。
您可能想检查一下其他普罗米修斯公司的出口商或伯劳公司是如何运作的。
您也不需要将zookeeper.connect作为该命令的一部分
https://stackoverflow.com/questions/59502202
复制相似问题