我们正在使用Spring Kafka实现Kafka Consumer。正如我所理解的,如果单个消息的处理失败,可以选择
RetryTemplate
RecoveryCallback
我想知道你的最佳做法是什么。我想到了简单的应用程序异常,例如DeserializationException(对于JSON格式的消息)或更长的本地存储停机时间等。意味着需要一些额外的工作,如修补程序部署,来修复损坏的应用程序以便能够重新处理错误的消息。
由于丢失消息(即不处理它们)不是我们的选择,唯一的选择是IMO将故障消息存储在某个持久性存储中,例如: G。另一个“错误消息”Kafka主题例如,以便稍后可以再次处理这些事件,并且不需要完全停止事件处理。
您如何处理这些情况?
答案 0 :(得分:3)
一个例子是Spring Cloud Stream,它可以配置为将失败的消息发布到另一个主题errors.foo;然后,用户可以将它们复制回原始主题,以便稍后再试。
此逻辑在恢复回调中完成。
答案 1 :(得分:1)
我们有一个用例,我们根本不会丢弃任何消息,即使是有错误的消息也是如此。因此,当我们遇到错误消息时,我们将发送一条默认消息来代替该错误记录,同时将消息发送到一个失败主题以便稍后重试。