代码之家  ›  专栏  ›  技术社区  ›  xmar

代理失败后,kafkastreams应用程序从一开始就重新处理

  •  0
  • xmar  · 技术社区  · 8 年前

    我有一个3-broker docker kafka aws集群,以及一个3-container kafkastreams应用程序,它从一个replication=2的“events”主题进行处理。

    我让其他用户在 this question 后来让我 this question . 在停止kafkastreams应用程序之后,我重新启动了失败的代理,一个是在星期五(大约花了一个小时),另一个是在下星期一重新启动的。

    当代理加入集群时,显然可以(显示“failed,i restarted application”。 __customer_offsets.sh 复制=3,所以应该是安全的。

    (作为参考,在 这个问题 )

    我的应用程序执行一些分派,因此输出主题偏移的总和应该等于原始事件的总和)。无论什么东西不到那里,都会变成 errors 话题一应俱全,所以总是相得益彰。

    但是,当重新启动时,应用程序从一开始就开始处理,处理的消息数量几乎翻了一番(当发生故障时,有一些未处理的延迟)。

    如果 __consumer_offsets 没有丢失(而且它们显然没有-它们只是显示出复制不足,但生活在代理中,在整个过程中都很好),为什么应用程序会从零开始处理?在什么情况下会发生这种情况呢?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Matthias J. Sax    8 年前

    Kafka会在一段保留时间后删除偏移量——默认值是24小时。因此,如果不更改配置,则在重新启动时,代理会检测到旧偏移量并将其删除。

    在即将发布的2.0版本中,默认值增加到7天: https://cwiki.apache.org/confluence/display/KAFKA/KIP-186%3A+Increase+offsets+retention+default+to+7+days

    同时比较: https://cwiki.apache.org/confluence/display/KAFKA/KIP-211%3A+Revise+Expiration+Semantics+of+Consumer+Group+Offsets