apache-kafka - __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
...
这怎么可能?为什么它不删除墓碑?
解决方案
压缩后的 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.ratio
,defaul = is 0.5
. 此计算不考虑活动段。
所以在你的场景中,它们仍然没有被压缩。这就是他们留在主题中的原因。
有关压缩和墓碑的更多信息,请参阅此
推荐阅读
- android - 改造错误:- 预期 BEGIN_ARRAY 但在路径 $ 处是 BEGIN_OBJECT
- python-3.x - 在 pipenv 中安装 twisted 时出错
- angular - Bitbucket Angular npm 运行构建失败
- c++ - 如何将 ostringstream 十六进制字符串字符对转换为单个 unit8_t 等效二进制值
- nginx - 目录的内容配置
- django - Django 管理员显示创建的实例,但在 DRF 视图中看不到它
- javascript - JavaScript 等待承诺
- javascript - 在 React 应用程序中使用 useState 更新路由器值时出现太多重新渲染错误
- java - 用于读取的带有 Java 的 Spark Cassandra 连接器
- wpf - Appium Windows Driver - 完成后按下Ctrl