confluent-kafka-python生产者和消费者中的error_cb

时间:2017-11-10 03:31:39

标签: python apache-kafka confluent

我想知道对于导致调用error_cb回调的evens的正确反应是什么。

最初,我们的代码始终从error_cb抛出异常,无论如何。我们在Kubernetes运行我们的东西,所以重新启动消费者/生产者(技术上)并不是什么大不了的事。但是重启次数非常重要,所以我们添加了几个例外,我们只是记录而不退出:

  • KafkaError._MSG_TIMED_OUT(包括消费者和制作人)
  • KafkaError._TRANSPORT(消费者)

这些是我们经常看到的,并且融合kafka-python似乎能够在没有任何额外帮助的情况下从它们中恢复。

现在我想知道我们是否应该在error_cb中抛出任何异常。我们是否应该开始将error_cb视为日志记录函数,并且只对poll和flush显式抛出的异常做出反应?

1 个答案:

答案 0 :(得分:1)

librdkafka将尽最大努力自动从其遇到的任何错误中恢复,因此error_cb主要是信息性的,并且通常不建议应用程序在发生此类错误时执行任何重大操作。

  • _MSG_TIMED_OUT_TIMED_OUT - Kafka协议请求超时,通常是由于网络或代理问题。将根据重试配置重试请求,或者相应的API /功能将传播更详细的错误(例如,未提交偏移)。可以安全地忽略此错误。
  • _TRANSPORT - 代理连接断开或无法建立,这也是一个临时的网络或代理问题,也可能被安全忽略。