python使用confluent_kafka库发送数据出现:“Local: Queue full” 解决
python相关方案比较少
看了一些文章和问题,分析总结了一下。本质上可能是两个原因导致的:
一个原因是生产能力大于了kafka server的接收,这种只能优化代码逻辑了。
另一个原因是confluent-kafka-go 这个包使用了队列的概念,累计到110万时,超出了队列的缓存区,所以不能再继续写入。可以定期以及在线程结束时对缓存区刷新解决。
刷新函数
producer.Flush()
定期刷新队列的线程函数
def flush_periodically(producer):
while True:
producer.Flush()
time.sleep(3600) # 每 3600 秒刷新一次
flush_thread = threading.Thread(target=flush_periodically, args=(producer,))
flush_thread.start()
即可解决