如何在 Kafka 中测试日志压缩是否有效?
How to test whether log compaction is working or not in Kafka?
我在 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.hours
或 topic.log.retention.hours
或 log.retention.size
配置有什么关系吗?这些配置在日志压缩中的作用是什么。
P.S。 - 我已经仔细阅读了 Apache 文档,但仍然不清楚。
实际上,日志压缩只有在日志数量达到非常高的计数(例如100万)时才可见。所以,如果你有那么多数据,那很好。否则,使用配置更改,您可以将此限制减少到 100 条消息,然后您可以看到在具有相同密钥的消息中,只有最新的消息会在那里,之前的消息将被删除。如果您每次都有完整的数据快照,那么最好使用日志压缩,否则您可能会丢失具有相同关联键的先前日志,这可能很有用。
尽管这个问题已经有几个月了,但我只是在为我自己的问题进行研究时遇到它。我已经创建了一个最小示例,用于查看压缩如何使用 Java,也许它对您也有帮助:
https://gist.github.com/anonymous/f78184eaeec3ee82b15182aec24a432a
此外,查阅文档后,我在主题级别使用了以下配置以尽快启动压缩:
min.cleanable.dirty.ratio=0.01
cleanup.policy=compact
segment.ms=100
delete.retention.ms=100
当 运行 时,此 class 表明压缩有效 - 只有一条消息在主题上具有相同的键。
通过适当的设置,这可以在命令行上重现。
最好也看看 log.roll.hours
,默认情况下是 168 小时。简而言之:即使您没有如此活跃的主题并且您无法在一周内填充最大段大小(默认情况下正常主题为 1G,偏移主题为 100M),您将有一个大小低于 log.segment.bytes
。该段可以在下一轮压缩。
为了从 CLI 检查主题 属性,您可以使用 Kafka-topics cmd 来完成:
https://grokbase.com/t/kafka/users/14aev0snbd/command-line-tool-for-topic-metadata
您可以使用 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
- 主题未压缩。
我在 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.hours
或 topic.log.retention.hours
或 log.retention.size
配置有什么关系吗?这些配置在日志压缩中的作用是什么。
P.S。 - 我已经仔细阅读了 Apache 文档,但仍然不清楚。
实际上,日志压缩只有在日志数量达到非常高的计数(例如100万)时才可见。所以,如果你有那么多数据,那很好。否则,使用配置更改,您可以将此限制减少到 100 条消息,然后您可以看到在具有相同密钥的消息中,只有最新的消息会在那里,之前的消息将被删除。如果您每次都有完整的数据快照,那么最好使用日志压缩,否则您可能会丢失具有相同关联键的先前日志,这可能很有用。
尽管这个问题已经有几个月了,但我只是在为我自己的问题进行研究时遇到它。我已经创建了一个最小示例,用于查看压缩如何使用 Java,也许它对您也有帮助:
https://gist.github.com/anonymous/f78184eaeec3ee82b15182aec24a432a
此外,查阅文档后,我在主题级别使用了以下配置以尽快启动压缩:
min.cleanable.dirty.ratio=0.01
cleanup.policy=compact
segment.ms=100
delete.retention.ms=100
当 运行 时,此 class 表明压缩有效 - 只有一条消息在主题上具有相同的键。
通过适当的设置,这可以在命令行上重现。
最好也看看 log.roll.hours
,默认情况下是 168 小时。简而言之:即使您没有如此活跃的主题并且您无法在一周内填充最大段大小(默认情况下正常主题为 1G,偏移主题为 100M),您将有一个大小低于 log.segment.bytes
。该段可以在下一轮压缩。
为了从 CLI 检查主题 属性,您可以使用 Kafka-topics cmd 来完成:
https://grokbase.com/t/kafka/users/14aev0snbd/command-line-tool-for-topic-metadata
您可以使用 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
- 主题未压缩。