消耗消息时进行Apache Kafka清理

时间:2019-07-16 13:50:26

标签: apache-kafka kafka-consumer-api

使用Apache Kafka及其保留机制,我在考虑以下情况:

  • 使用者获取第一批偏移量为1-5的消息
  • 清洁程序删除前10条消息,因此该主题现在的偏移量为11-15
  • 在下一次民意调查中,消费者使用偏移量11-15来获取下一批

如您所见,消费者损失了抵消额6-10。

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

2 个答案:

答案 0 :(得分:0)

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

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

为避免出现这种情况,您应该监视消费者组的销售线索。它类似于滞后,但是超前表示消费者离分区起点的距离。刚开始时就有可能在删除邮件之前将其删除。

如果使用者接近极限,则可以根据需要动态添加更多使用者或增加主题保留大小/时间。

如果发生这种情况,将auto.offset.reset设置为none会引发异常,其他值只会记录该异常。

答案 1 :(得分:0)

  • 问题,这种情况有可能吗?当有活跃的消费者时,清洁工会执行吗 是的,如果消息在消费之前已经超过TTL(生存时间)期限,则可能出现这种情况。
  • 消费者是否能够以某种方式认识到这一差距? 如果您怀疑您的配置(较高的使用者延迟,较低的TTL)可能导致这种情况,则使用者应跟踪偏移量。 kafka-consumer-groups.sh命令可为您提供使用者组中所有使用者的信息位置,以及它们到日志末尾的距离。