Python 同步卡夫卡制作人发送仍有0秒超时?
我在Python脚本中有以下代码Python 同步卡夫卡制作人发送仍有0秒超时?,python,apache-kafka,Python,Apache Kafka,我在Python脚本中有以下代码 from kafka import KafkaProducer kafka_producer = KafkaProducer(....) kafka_producer.send(topic, value=message) kafka_producer.flush() logger.info('Done!') # this message is displayed 然而,我仍然看到了下面的消息。消息似乎已成功发送。为什么即使调用了flush(),也会显示“
from kafka import KafkaProducer
kafka_producer = KafkaProducer(....)
kafka_producer.send(topic, value=message)
kafka_producer.flush()
logger.info('Done!') # this message is displayed
然而,我仍然看到了下面的消息。消息似乎已成功发送。为什么即使调用了flush()
,也会显示“0秒超时”消息
信息:根:完成
信息:kafka.producer.kafka:以0秒超时关闭kafka制作者
信息:kafka.producer.kafka:继续强制关闭生产者,因为挂起的请求无法在超时0内完成
信息:kafka.conn::正在关闭连接
我认为在这种情况下,错误消息是不正确的。有关守则— 我对守则的解释: 如果
timeout
为0
我们跳过优雅关闭代码,直接进入强制关闭。在登录之前,在\u发送方上检查的唯一条件是它是否存在,以及它是否存在。当然,它是存在的,它是活的,因为它从来没有被告知要关闭
如果超时
为0
,则它从不检查是否可以完成或无法完成任何操作。因此,在这种情况下,日志记录是不正确的
在timeout>0
的情况下,日志记录是有意义的initiate\u close()
会被调用,这意味着您只能通过稍后检查is\u alive()
来知道join是否成功。如果在尝试了join()
之后它仍然处于活动状态,那么它将强制关闭它,并且请求无法在超时时间内完成。我认为在这种情况下,错误消息是不正确的。有关守则—
我对守则的解释:
如果timeout
为0
我们跳过优雅关闭代码,直接进入强制关闭。在登录之前,在\u发送方上检查的唯一条件是它是否存在,以及它是否存在。当然,它是存在的,它是活的,因为它从来没有被告知要关闭
如果超时
为0
,则它从不检查是否可以完成或无法完成任何操作。因此,在这种情况下,日志记录是不正确的
在timeout>0
的情况下,日志记录是有意义的initiate\u close()
会被调用,这意味着您只能通过稍后检查is\u alive()
来知道join是否成功。如果在尝试join()
之后它仍然处于活动状态,则它将强制关闭它,并且请求无法在超时内完成
if timeout > 0:
if invoked_from_callback:
log.warning("Overriding close timeout %s secs to 0 in order to"
" prevent useless blocking due to self-join. This"
" means you have incorrectly invoked close with a"
" non-zero timeout from the producer call-back.",
timeout)
else:
# Try to close gracefully.
if self._sender is not None:
self._sender.initiate_close()
self._sender.join(timeout)
if self._sender is not None and self._sender.is_alive():
log.info("Proceeding to force close the producer since pending"
" requests could not be completed within timeout %s.",
timeout)
self._sender.force_close()