Apache kafka Kafka日志压缩返回具有相同密钥的两条记录
我在卡夫卡的原木压缩中有一种奇怪的行为。我已使用以下配置创建了一个主题:Apache kafka Kafka日志压缩返回具有相同密钥的两条记录,apache-kafka,Apache Kafka,我在卡夫卡的原木压缩中有一种奇怪的行为。我已使用以下配置创建了一个主题: kafka-topics --zookeeper ... \ --create --topic myTopic \ --partitions 12 \ --replication-factor 3 \ --config "min.insync.replicas=2" \ --config "cleanup.policy=compact" \ --config "delete.retention.ms=100" \ --co
kafka-topics --zookeeper ... \
--create --topic myTopic \
--partitions 12 \
--replication-factor 3 \
--config "min.insync.replicas=2" \
--config "cleanup.policy=compact" \
--config "delete.retention.ms=100" \
--config "retention.bytes=-1" \
--config "segment.ms=100" \
--config "min.cleanable.dirty.ratio=0.000001" \
--config "min.compaction.lag.ms=10"
我用相同的键向主题发送消息,当compation启动时,它返回该主题的最后两条消息
例如:
Writting message with key="1" and value="A" into topic "myTopic"
Writting message with key="1" and value="B" into topic "myTopic"
Writting message with key="1" and value="C" into topic "myTopic"
压实
从头开始打印“myTopic”
{“ROWTIME”:1549444994905,“ROWKEY”:“1”,“value=B”}
{“ROWTIME”:1549444994905,“ROWKEY”:“1”,“value=C”}
压实
从头开始打印“myTopic”
{“ROWTIME”:1549444994905,“ROWKEY”:“1”,“value=C”}
{“ROWTIME”:1549444994905,“ROWKEY”:“1”,“value=D”}
与段相同。ms=60000
有什么想法吗
谢谢 压实前,卡夫卡确定了不能参与压实的最低偏移位置(
firstUncleanableDirtyOffset
)
该位置基于以下计算:
- 第一不稳定偏移量
- 活动段偏移量
min.compression.lag.ms
min.compression.lag.ms
非常低,因此最低偏移位置(不能参与压缩)取自活动段。因为只有一条消息可以参与压缩(例如key=1,value=C),所以没有什么可做的
如果您使用其他键生成额外的消息,它应该压缩key=1
的消息
注意:您还必须了解决定段大小的
segment.bytes
属性。如果消息与段.字节相比较小,则它们可能处于活动段中,不会被压缩。在压缩之前,Kafka确定了不能参与压缩的最低偏移位置(firstUncleanableDirtyOffset
)
该位置基于以下计算:
- 第一不稳定偏移量
- 活动段偏移量
min.compression.lag.ms
在您的情况下,min.compression.lag.ms
非常低,因此最低偏移位置(不能参与压缩)取自活动段。因为只有一条消息可以参与压缩(例如key=1,value=C),所以没有什么可做的
如果您使用其他键生成额外的消息,它应该压缩key=1
的消息
注意:您还必须了解决定段大小的segment.bytes
属性。若与段.bytes
相比,消息较小,则它们可能位于活动段中,不会被压缩
Writting message with key="1" and value="D" into topic "myTopic"