我在Kafka 0.8.1.1中对server.properties文件进行了更改,即在创建主题时添加了log.cleaner.enable=true
并启用了cleanup.policy=compact
。
现在,当我测试它时,我将以下消息推送到主题,其中包含以下内容(Key,Message)。
现在我使用与先前输入相同的键推送第4条消息,但更改了消息。这里的日志压缩应该会出现。使用Kafka工具,我可以看到主题中的所有4个偏移。我怎么知道日志压缩是否有效?是否应删除先前的消息,或者在推送新消息时日志压缩工作正常。
是否必须对log.retention.hours
或topic.log.retention.hours
或log.retention.size
配置执行任何操作?这些配置在日志压缩中的作用是什么。
附: - 我已经彻底浏览了Apache文档,但仍然不清楚。
答案 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