首页 > 解决方案 > __consumer_offsets 主题中的 Tombstone 从未删除。为什么?

问题描述

我注意到在__consumer_offsets主题中有很多墓碑,即使我设置了 log.cleaner.delete.retention.ms = 0

bin/kafka-console-consumer.sh --consumer.config /tmp/consumer.config --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter" --bootstrap-server localhost:9092 --topic __consumer_offsets --from-beginning
...
[b316,test,25]::[OffsetMetadata[35,NO_METADATA],CommitTime 1623427715903,ExpirationTime 1623427775903]
[b316,test,61]::[OffsetMetadata[35,NO_METADATA],CommitTime 1623427715903,ExpirationTime 1623427775903]
[b316,test,41]::[OffsetMetadata[34,NO_METADATA],CommitTime 1623427715903,ExpirationTime 1623427775903]
[b316,test,5]::[OffsetMetadata[34,NO_METADATA],CommitTime 1623427715903,ExpirationTime 1623427775903]
...
[b316,test,50]::NULL
[b316,test,70]::NULL
[b316,test,54]::NULL
[b316,test,31]::NULL
...

这怎么可能?为什么它不删除墓碑?

标签: apache-kafka

解决方案


压缩后的 tomstone 消息,current time - compacted time应该大于delete.retention.ms. 它由代理配置默认log.cleaner.delete.retention.ms。所以在你的情况下它是零。但这适用于压缩日志。

但是要压缩日志中的 kafka 消息,not compacted / compacted + not compacted它所调用的比率dirty ratio应该大于 config min.cleanable.dirty.ratiodefaul = is 0.5. 此计算不考虑活动段。

所以在你的场景中,它们仍然没有被压缩。这就是他们留在主题中的原因。

有关压缩和墓碑的更多信息,请参阅此


推荐阅读