经纪人失败后KafkaStreams应用程序从开始重新处理

时间:2018-06-15 11:22:23

标签: apache-kafka apache-kafka-streams

我有一个3代理的Docker Kafka AWS集群,以及一个3容器的KafkaStreams应用程序处理来自“事件”主题,复制= 2。

我在this question中写了其他用户写的失败,后来让我发了this question。停止KafkaStreams应用程序后,我重新启动了失败的代理,一个星期五(花了一个小时),另一个在下周一重启。

当经纪人明显加入集群时(显示“失败,我重新启动了应用程序。 __customer_offsets.sh复制= 3,因此它们应该是安全的。

(作为参考,在this question中更好地描述了群集情况)。

我的应用程序执行一些调度,因此输出主题偏移的总和应该等于原始事件的总和)。无论是什么都没有,它会以一种全能的方式进入errors主题,所以它们总是匹配。

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

如果__consumer_offsets没有丢失(而且他们显然没有 - 他们只是表现不足,但生活在经纪人的整个过程中都很好),为什么应用程序会从零开始处理?在这种情况下预期 - 或者这可能发生?

1 个答案:

答案 0 :(得分:0)

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