我正在进行Kafka压缩主题配置,并创建了一个具有以下属性的主题。我知道,压缩不适用于活动段,所以我给segment.bytes和segment.ms属性的值较少。
kafka-topics.sh --bootstrap-server localhost:19092,localhost:29092,localhost:39092 --create --partitions 3
--replication-factor 3 --topic test --config "cleanup.policy=compact" --config "delete.retention.ms=1000"
--config "segment.ms=1000" --config "min.cleanable.dirty.ratio=0.01" --config "min.compaction.lag.ms=500" --config "segment.bytes = 10737"
我已经推送了5条信息到下面的主题。
A : {"name":"aaa"}
B : {"name":"bbb"}
C : {"name":"ccc"}
D : {"name":"ddd"}
E : {"name":"eee"}
第二次,我推送了一些关于以下主题的信息。
A : {"name":"aa1"}
B : {"name":"bb1"}
C : {"name":"cc1"}
但我能看到重复的信息。以前的邮件不会删除。
A : {"name":"aaa"}
B : {"name":"bbb"}
C : {"name":"ccc"}
D : {"name":"ddd"}
E : {"name":"eee"}
A : {"name":"aa1"}
B : {"name":"bb1"}
C : {"name":"cc1"}
第三次,我又用";A";
A : {"name" : "aa2" }
然后,具有关键字"strong"的第一个消息被发送到"strong";A"和";aaa">值已被删除。但现在我收到了最后两条带有密钥"的消息;A";主题的结果如下。
B : {"name":"bbb"}
C : {"name":"ccc"}
D : {"name":"ddd"}
E : {"name":"eee"}
A : {"name":"aa1"} <--
B : {"name":"bb1"}
C : {"name":"cc1"}
D : {"name":"dd1"}
E : {"name":"ee1"}
A : {"name":"aa2"} <--
有人能告诉我,是什么原因以及为什么即使segment.bytes和segment.ms的数量较少,消息也没有在第二次推送中删除?为什么主题中有两条密钥相同的消息?
谢谢!
触发主题压缩时有许多因素。正如您正确指出的,活动分段永远不会被压缩。此外,还有一个所谓的";脏率;(可配置(在考虑压缩主题之前必须达到的值。此外,您可以配置压缩线程实际被调用的频率——为了避免繁忙的空闲,压缩线程是";暂停";并且仅不时调用。
有关相应的配置名称,请参阅文档。
我的一般建议是:不要试图对压实进行推理。它很复杂,并不可靠。您应该始终以能够处理重复密钥的方式构建应用程序。