apache-kafka - 使用消息时的 Apache Kafka 清理
问题描述
玩弄 Apache Kafka 及其保留机制,我正在考虑以下情况:
- 消费者获取第一批偏移量为 1-5 的消息
- 清理器删除了前 10 条消息,因此该主题现在具有 11-15 的偏移量
- 在下一次轮询中,消费者获取下一批偏移量为 11-15
如您所见,消费者丢失了 6-10 的偏移量。
问题,这种情况可能吗?换句话说,当有一个活跃的消费者时,清洁器会执行吗?如果是,消费者是否能够以某种方式认识到这种差距?
解决方案
是的,这种情况可能会发生。确切的步骤会有所不同:
- 消费者获取消息 1-5
- 消息 1-10 被删除
- 消费者尝试获取消息 6,但此偏移量超出范围
- 消费者使用其偏移重置策略
auto.offset.reset
来查找新的有效偏移。- 如果设置为
latest
,消费者移动到分区的末尾 - 如果设置为
earliest
消费者移动到偏移量 11 - 如果
none
或未设置,则消费者抛出异常
- 如果设置为
为了避免这种情况,您应该监控您的消费者组的领导。它类似于滞后,但领先表示消费者离分区的起点有多远。接近开始有消息在被消费之前被删除的风险。
如果消费者接近限制,您可以动态添加更多消费者或根据需要增加主题保留大小/时间。
如果发生这种情况,设置auto.offset.reset
为none
将引发异常,其他值仅记录它。
推荐阅读
- reactjs - 当我尝试将 React 应用程序部署到 GitHub Pages 时,为什么会出现错误?
- postgresql - postgres 是否支持内存临时表
- java - Spring Boot 页面控制器中的正则表达式
- python - 替换列表中的字符串
- authorization - 使用开放策略代理 (OPA) 作为 ABAC 系统
- apache - Apache Camel 框架正在将值 99999999999.99 转换为 9.999999999999E10
- excel - 打开包含特定日期的 Excel 文件
- java - 如何解决 Spark 流程序中的“错误运行作业流作业”?
- istio - 如何将 IP 和某些流量的服务列入白名单
- angular - 如何使用(Angular js+springboot)修复“Access-Control-Allow-Origin”错误