【问题标题】:Does Kafka consumer reads the message from active segment in the partition?Kafka 消费者是否从分区中的活动段读取消息?
【发布时间】:2021-01-22 03:51:25
【问题描述】:
假设我有一个分区(partition-0),其中包含 4 个已提交且符合压缩条件的段。因此所有这些段都不会有任何重复数据,因为压缩是在所有 4 个段上完成的。
现在,有一个活动段仍未关闭。同时,如果消费者开始从partition-0读取数据,是否也会从active segment读取消息?
注意:我的目标是不向消费者提供特定键的重复数据。
【问题讨论】:
标签:
apache-kafka
kafka-consumer-api
kafka-topic
kafka-partition
【解决方案1】:
您的担忧是有效的,因为消费者也会从活动段中读取消息。日志压缩并不能保证您恰好拥有一个特定键的值,而是至少一个。
以下是文档中介绍 Log Compaction 的方式:
日志压缩确保 Kafka 将始终为单个主题分区的数据日志中的每个消息键保留至少最后一个已知值。
但是,您可以尝试更频繁地运行压缩,以使活动和非压缩段尽可能小。然而,这是有代价的,因为运行压缩日志清理器会占用资源。
主题级别有很多与日志压缩相关的配置。这里是最重要的,所有细节都可以查到here:
- delete.retention.ms
- max.compaction.lag.ms
- min.cleanable.dirty.ratio
- min.compaction.lag.ms
- segment.bytes
但是,我非常相信您将无法保证您的消费者永远不会收到任何带有日志压缩主题的重复项。