如何在Kafka中测试日志压缩是否有效?

时间:2015-12-15 05:19:52

标签: message-queue apache-kafka retention stream-compaction

我在Kafka 0.8.1.1中对server.properties文件进行了更改,即在创建主题时添加了log.cleaner.enable=true并启用了cleanup.policy=compact。 现在,当我测试它时,我将以下消息推送到主题,其中包含以下内容(Key,Message)。

  • 抵消:1 - (123,abc);
  • 抵消:2 - (234,def);
  • 抵消:3 - (345,ghi);
  • 抵消:4 - (123,已更改)

现在我使用与先前输入相同的键推送第4条消息,但更改了消息。这里的日志压缩应该会出现。使用Kafka工具,我可以看到主题中的所有4个偏移。我怎么知道日志压缩是否有效?是否应删除先前的消息,或者在推送新消息时日志压缩工作正常。 是否必须对log.retention.hourstopic.log.retention.hourslog.retention.size配置执行任何操作?这些配置在日志压缩中的作用是什么。 附: - 我已经彻底浏览了Apache文档,但仍然不清楚。

5 个答案:

答案 0 :(得分:8)

即使这个问题已经有几个月了,我还是碰到了它为我自己的问题做研究。我已经创建了一个最小的例子来了解压缩如何与Java一起工作,也许它对你也有帮助:

https://gist.github.com/anonymous/f78184eaeec3ee82b15182aec24a432a

此外,在查阅文档后,我在主题级别使用了以下配置,以便尽快启动压缩:

min.cleanable.dirty.ratio=0.01
cleanup.policy=compact
segment.ms=100
delete.retention.ms=100

运行时,此类显示压缩有效 - 只有一条消息在主题上具有相同的键。

使用适当的设置,这可以在命令行上重现。

答案 1 :(得分:2)

实际上,只有当日志数量达到非常高的数量(例如100万)时,日志压缩才可见。所以,如果你有那么多数据,这很好。否则,使用配置更改,您可以将此限制减少为100条消息,然后您可以看到具有相同密钥的消息中,只有最新消息将存在,前一条消息将被删除。如果每次都有完整的数据快照,最好使用日志压缩,否则您可能会使用相同的关联密钥丢失以前的日志,这可能很有用。

答案 2 :(得分:1)

最好还看一下log.roll.hours,默认情况下是168小时。简单来说:即使您没有那么活跃的主题,并且您无法在一周内填充最大段大小(默认为正常主题为1G,偏移主题为100M),您将拥有一个大小低于日志的封闭段.segment.bytes。这个细分可以在下一轮进行压缩。

答案 3 :(得分:0)

您可以使用kafka-topics CLI执行此操作。 我正在从docker(confluentinc/cp-enterprise-kafka:6.0.0)运行它。

$ docker-compose exec kafka kafka-topics --zookeeper zookeeper:32181 --describe --topic count-colors-output
Topic: count-colors-output  PartitionCount: 1   ReplicationFactor: 1    Configs: cleanup.policy=compact,segment.ms=100,min.cleanable.dirty.ratio=0.01,delete.retention.ms=100
    Topic: count-colors-output  Partition: 0    Leader: 1   Replicas: 1 Isr: 1

,但是如果您在“配置”字段中没有看到任何内容,请不要感到困惑。如果使用默认值,则会发生这种情况。因此,除非您在输出中看到cleanup.policy=compact,否则不会压缩该主题。

答案 4 :(得分:-1)

要在CLI中检查Topics属性,可以使用Kafka-topics cmd进行操作:

https://grokbase.com/t/kafka/users/14aev0snbd/command-line-tool-for-topic-metadata