Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Kafka日志压缩返回具有相同密钥的两条记录_Apache Kafka - Fatal编程技术网

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"