如何在被动kafka 0.8.2.2中重新运行失败的消息

时间:2017-12-15 19:06:21

标签: apache-kafka kafka-consumer-api akka-stream reactive

我想重新发布x无法处理的消息。我看到手动提交代码:

val consumerWithOffsetSink = kafka.consumeWithOffsetSink(consumerProperties)
Source.fromPublisher(consumerWithOffsetSink.publisher)
.map(processMessage(_)) // your message processing
.to(consumerWithOffsetSink.offsetCommitSink) // stream back for commit
.run()

但是,如何处理processMessage()方法中的异常?我想处理异常并要求kafka重新运行该消息3次。如果3次后仍然失败,请将其丢弃。

2 个答案:

答案 0 :(得分:0)

考虑定义一个死信队列(像DB这样的其他存储也可以)来存储这些消息,然后,我们可以尝试分析并解决它们。

答案 1 :(得分:0)

我相信你能够处理至少一次读取,但是你不想在出现故障的情况下永久停止,并且宁愿在3次重试之后再继续处理其余的消息。失败的消息。

这可以通过apache kafka中的简单消费者轻松实现。如果这是一个选项,让我知道,我会解释。

如果是反应性kafka,在processMessage中重新尝试三次之后,我们将不得不寻找一种方法来返回一个“处理过的”'消息返回。这样它就会在下一个偏移提交中包含(失败的消息的偏移量)到接收器中(好像它已被处理),并且不会再次出现。

相关问题