15

我在 Kafka 0.8.1.1 中的 server.properties 文件中进行了更改,即添加log.cleaner.enable=truecleanup.policy=compact在创建主题时启用。现在,当我测试它时,我将以下消息推送到带有以下(键,消息)的主题。

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

现在,我使用与先前输入相同的键推送第四条消息,但更改了消息。这里应该出现日志压缩。使用 Kafka 工具,我可以看到主题中的所有 4 个偏移量。我如何知道日志压缩是否有效?是否应该删除较早的消息,或者在推送新消息时日志压缩工作正常。它与log.retention.hoursor topic.log.retention.hoursorlog.retention.size配置有什么关系吗?这些配置在日志压缩中的作用是什么。PS - 我已经彻底阅读了 Apache 文档,但仍然不清楚。

4

5 回答 5

16

尽管这个问题已经存在几个月了,但我只是在为我自己的问题进行研究时遇到了它。我创建了一个最小的示例来查看压缩如何与 Java 一起工作,也许它对您也有帮助:

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

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

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

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

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

于 2016-08-11T10:38:15.670 回答
4

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

于 2016-03-09T13:07:49.747 回答
1

为了从 CLI 检查主题属性,您可以使用 Kafka-topics cmd 进行:

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

于 2018-09-23T17:03:10.813 回答
1

最好也看看log.roll.hours,默认情况下是 168 小时。简而言之:即使您没有如此活跃的主题并且您无法在一周内填充最大段大小(默认为普通主题 1G,偏移主题默认为 100M),您将拥有一个大小低于 的封闭段log.segment.bytes。该段可以在下一回合被压缩。

于 2018-03-07T10:10:33.427 回答
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

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

于 2020-12-16T17:10:27.787 回答