0

我的输入是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

4

1 回答 1

2

Kafka 中的压缩不是立即的。如果您将具有相同密钥的两条消息发送到压缩主题,并且您在该主题上有一个实时消费者,那么该消费者看到两条消息都通过。

周期性地,有一个后台清理线程去寻找压缩主题中的重复键,并删除被覆盖的记录,以便在该日志清理器运行拉取数据的消费者只会看到特定的最后更改/更新钥匙。因此,主题压缩似乎更适合定期运行的消费者,而不是 100% 时间处于活动状态的消费者。

您可以调整此后台日志清理线程运行的频率,以更频繁地运行这些消费者。log.cleaner在 Kafka 文档中 查找配置参数: https ://kafka.apache.org/documentation/#brokerconfigs

在这个链接上有一个关于 Kafka 日志压缩如何工作的很好的解释: https ://medium.com/swlh/introduction-to-topic-log-compaction-in-apache-kafka-3e4d4afd2262

于 2019-12-10T16:48:36.847 回答