我正在尝试实现简单的服务,从kafka中提取消息将它们包装在一些数据中并发送到外部服务。
处理邮件时处理外部服务不可用性的常见模式是什么?
到目前为止,只有当外部服务请求成功时,我才会手动提交消息。如果不是committetd,我希望kafka在一段时间后重新发送消息,以便处理外部服务失败对消费者来说是透明的。我找不到办法做到这一点。 然而,如果我没有做一些反模式并且有更好的解决方案,我很好奇。
答案 0 :(得分:2)
首先你需要考虑的是,Kafka基于 pull 。因此,如果您希望第二次收到消息,则需要seek()
到其偏移量poll()
。
此外,如果您想停止处理消息,可以pause()
分区,然后resume()
分区。请参阅Consumer JavaDoc中的"消费流控制" 部分:https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html
因此,如果您的外部服务已关闭,只需暂停并等待它回来。