Kafka 消费者是否从分区中的活动段读取消息?

Does Kafka consumer reads the message from active segment in the partition?

假设我有一个分区 (partition-0),其中包含 4 个已提交且符合压缩条件的段。所以所有这些段都不会有任何重复数据,因为压缩是在所有 4 个段上完成的。

现在,有一个活动段还没有关闭。同时,如果consumer开始从partition-0读取数据,是否也从active segment读取消息?

注意:我的目标是不向消费者提供特定密钥的重复数据。

您的担忧是有道理的,因为消费者也会阅读来自活动段的消息。日志压缩并不能保证您 恰好 一个特定键的值,而是 至少 一个。

文档中是这样介绍日志压缩的:

Log compaction ensures that Kafka will always retain at least the last known value for each message key within the log of data for a single topic partition.

但是,您可以尝试更频繁地压缩 运行 以使您的活动和 non-compated 段尽可能小。然而,这是有代价的,因为 运行 压缩日志清理器占用资源。

主题级别有很多与日志压缩相关的配置。这里是最重要的,所有细节都可以 looked-up here:

  • delete.retention.ms
  • max.compaction.lag.ms
  • min.cleanable.dirty.ratio
  • min.compaction.lag.ms
  • segment.bytes

但是,我非常相信您无法保证您的消费者永远不会收到任何具有日志压缩主题的重复项。