首页 > 解决方案 > 使用消息时的 Apache Kafka 清理

问题描述

玩弄 Apache Kafka 及其保留机制,我正在考虑以下情况:

如您所见,消费者丢失了 6-10 的偏移量。

问题,这种情况可能吗?换句话说,当有一个活跃的消费者时,清洁器会执行吗?如果是,消费者是否能够以某种方式认识到这种差距?

标签: apache-kafkakafka-consumer-api

解决方案


是的,这种情况可能会发生。确切的步骤会有所不同:

  • 消费者获取消息 1-5
  • 消息 1-10 被删除
  • 消费者尝试获取消息 6,但此偏移量超出范围
  • 消费者使用其偏移重置策略auto.offset.reset来查找新的有效偏移。
    • 如果设置为latest,消费者移动到分区的末尾
    • 如果设置为earliest消费者移动到偏移量 11
    • 如果none或未设置,则消费者抛出异常

为了避免这种情况,您应该监控您的消费者组的领导。它类似于滞后,但领先表示消费者离分区的起点有多远。接近开始有消息在被消费之前被删除的风险。

如果消费者接近限制,您可以动态添加更多消费者或根据需要增加主题保留大小/时间。

如果发生这种情况,设置auto.offset.resetnone将引发异常,其他值仅记录它。


推荐阅读