Apache kafka ApacheKafka中压缩的工作原理

Apache kafka ApacheKafka中压缩的工作原理,apache-kafka,tombstone,Apache Kafka,Tombstone,我的输入是1:45$,我们正在处理消息,接下来我将更新1:null 我仍然看到主题中的1:45$以及1:null(我可以看到这两条消息) 我希望同一主题中的输出为1:null 我使用了以下代码: kafka-topics --create --zookeeper zookeeper:2181 --topic latest- product-price --replication-factor 1 --partitions 1 --config "cleanup.policy

我的输入是
1:45$
,我们正在处理消息,接下来我将更新
1:null

我仍然看到主题中的
1:45$
以及
1:null
(我可以看到这两条消息)

我希望同一主题中的输出为
1:null

我使用了以下代码:

kafka-topics --create --zookeeper zookeeper:2181 --topic latest-       product-price --replication-factor 1 --partitions 1 --config "cleanup.policy=compact" --config "delete.retention.ms=100"  --config "segment.ms=100" --config "min.cleanable.dirty.ratio=0.01"



kafka-console-producer --broker-list localhost:9092 --topic latest-    product-price --property parse.key=true --property key.separator=::

1::45$
1::null


kafka-console-consumer --bootstrap-server localhost:9092 --topic latest-product-price --property  print.key=true --property key.separator=:: --from-beginning

但是在我的例子中,我没有发现任何压缩,需要一些输入才能使值为
1::null

卡夫卡中的压缩不是即时的。如果您向一个压缩主题发送两条具有相同密钥的消息,并且该主题上有一个活动消费者,则该消费者将看到这两条消息

定期会有一个后台清理线程在压缩的主题中查找重复的键,并删除覆盖的记录,这样在日志清理器运行后提取数据的使用者将只看到特定键的最后更改/更新。因此,主题压缩似乎更适合周期性运行的用户,而不是100%处于活动状态的用户

您可以调整此后台日志清理器线程的运行频率,以便更频繁地运行这些使用者。在卡夫卡文档中查找
log.cleaner
配置参数:

关于Kafka日志压缩在该链接中的工作原理,有一个很好的解释:

本主题有多少部分?日志压缩不考虑活动段。是否启用了日志清理器?这是“Log.cleaner.min.cleanable.ratio”吗??