卡夫卡消费者的断路器

时间:2018-01-02 11:16:41

标签: spring apache-kafka kafka-consumer-api circuit-breaker

是否可以通过基于 Spring Kafka 的消费者实施断路器模式。我想知道在实现我的Spring kafka使用者时,如果基于某些外部系统无法处理数据并且引发网络错误,则可能会停止使用记录。但是,如果网络问题得到解决,消费者应该再次正常处理。

3 个答案:

答案 0 :(得分:1)

如果要在下游服务或数据库关闭时停止使用消息,则可以参考此解决方案。

示例

  • 消费者正在呼叫服务A
  • 服务A正在调用外部HTTP服务B
  • 您要在外部服务B停机时设置断路器

在这种情况下,您可以在服务A上设置断路器。每当外部服务B关闭时,此电路就会断开。然后,在此断路器的状态转换后,调用您的侦听器/绑定(如果使用的是spring-cloud-stream)以停止/暂停使用方。因此,您的消息将一直停留在队列/主题上,直到断路器再次合上并且您不必使消息死信或将其放入错误队列/主题中。

您可以在下面的链接中找到详细的解决方案,该解决方案使用 Resilience4j spring-cloud-stream 用于消费者

https://dublincoders.com/circuit-breaker-kafka/

答案 1 :(得分:0)

使用死信队列(DLQ)重试是处理消费者失败的良好模式,而断路器模式可以很好地处理生产者问题。

答案 2 :(得分:0)

给出:

  • 服务A产生主题T事件e1
  • 服务B从主题T事件e1消费并调用远程REST服务r1

然后:

  • 由于服务A和B通过主题T进行交互,因此不需要背压。
  • 您需要关闭服务B和远程REST服务r1之间的电路。为此,您可以仅使用Spring Boot @HystrixCommand并在“ fallbackMethod”方法中引发异常。只要电路断开,就不会提交偏移,并且您将重新使用事件e1。

这就是我的做法:-)如果您找到了更好的方法,请分享!