apache-kafka - Kafka 消费者是否从分区中的活动段读取消息?
问题描述
假设我有一个分区(partition-0),其中包含 4 个已提交且符合压缩条件的段。所以所有这些段都不会有任何重复数据,因为压缩是在所有 4 个段上完成的。
现在,有一个活动段仍未关闭。同时,如果消费者开始从 partition-0 读取数据,它是否也从活动段读取消息?
注意:我的目标是不向消费者提供特定键的重复数据。
解决方案
您的担忧是有效的,因为消费者还将读取来自活动段的消息。日志压缩并不能保证您对特定键只有一个值,而是至少有一个值。
以下是文档中介绍 Log Compaction 的方式:
日志压缩确保 Kafka 将始终为单个主题分区的数据日志中的每个消息键至少保留最后一个已知值。
但是,您可以尝试更频繁地运行压缩,以使您的活动和非压缩段尽可能小。然而,这是有代价的,因为运行压缩日志清理器会占用资源。
在主题级别有很多与日志压缩相关的配置。这是最重要的,所有细节都可以在这里查找:
- 删除.retention.ms
- max.compaction.lag.ms
- min.cleanable.dirty.ratio
- min.compaction.lag.ms
- 段字节
但是,我非常相信您将无法保证您的消费者永远不会获得任何具有日志压缩主题的重复项。
推荐阅读
- next.js - 如何在 next.js 中获取图像宽度/高度?
- gitlab - 剪切新版本时如何触发 GitLab CI/CD 管道?
- spring-boot - 如何从manyToMany实体获取数据
- flutter - Flutter Stack Widget 有空白,原因不明
- javascript - 生命游戏“细胞”没有正确更新
- regex - 关于 $regex 的简单 MongoDB 问题(业余)
- c# - 从原始 JSON 在其他字典中创建字典
- sql - SQL查询跨类别累计购买总和
- c++ - 将二维数组中的值分配给类
- jersey - 如何注释不在方法参数中的@NotNull @QueryParam