【发布时间】:2020-04-17 12:13:58
【问题描述】:
用例
我为 Kafka Consumer Group 偏移量 (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 和提交时间戳。它还将打印墓碑(NULL 值)。有一些消费者组偏移量仍然没有墓碑,即使它们的偏移量已在 6 个月前提交(偏移量保留设置为 2w)。当我列出来自 Kafka 的消费者组时(使用其他 shell 脚本),Kafka 也没有列出这个消费者组 - 所以内部 Kafka 显然知道这些偏移量已过期。
问题
为什么 Kafka 有时不会为过期的偏移量生成墓碑?当 Kafka 显然不依赖于接收 Tombstones 来获取过期的组偏移量时,它如何知道这些偏移量已过期?
【问题讨论】:
标签: apache-kafka