Kafka - 处理消费者无法处理消息的模式

时间:2016-10-01 04:40:40

标签: scala apache-kafka reactive-kafka

我正在尝试实现简单的服务,从kafka中提取消息将它们包装在一些数据中并发送到外部服务。

处理邮件时处理外部服务不可用性的常见模式是什么?

到目前为止,只有当外部服务请求成功时,我才会手动提交消息。如果不是committetd,我希望kafka在一段时间后重新发送消息,以便处理外部服务失败对消费者来说是透明的。我找不到办法做到这一点。 然而,如果我没有做一些反模式并且有更好的解决方案,我很好奇。

1 个答案:

答案 0 :(得分:2)

首先你需要考虑的是,Kafka基于 pull 。因此,如果您希望第二次收到消息,则需要seek()到其偏移量poll()

此外,如果您想停止处理消息,可以pause()分区,然后resume()分区。请参阅Consumer JavaDoc中的"消费流控制" 部分:https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

因此,如果您的外部服务已关闭,只需暂停并等待它回来。