我有一个高吞吐量kafka生产者用例,我想每秒推送数千个json消息。
我有一个3节点的kafka集群,并且正在使用最新的kafka-python库,并具有以下产生消息的方法
def publish_to_kafka(topic):
data = get_data(topic)
producer = KafkaProducer(bootstrap_servers=['b1', 'b2', 'b3'],
value_serializer=lambda x: dumps(x).encode('utf-8'), compression_type='gzip')
try:
for obj in data:
producer.send(topic, value=obj)
except Exception as e:
logger.error(e)
finally:
producer.close()
我的主题有3个分区。
方法有时可以正常工作,并且失败,并显示错误“ KafkaTimeoutError:60.0秒后无法更新元数据”。
我需要更改哪些设置才能使其正常工作?
答案 0 :(得分:0)
如果一个主题不存在,而您试图产生该主题,并且自动创建主题设置为false,则可能会发生。
可能的解决方案::在代理配置(server.properties)auto.create.topics.enable=true
中(注意,这在Confluent Kafka中是默认设置)
如果用Kafka代理更新元数据花费的时间超过60秒,则另一种情况可能是网络拥塞或速度过快。
可能的分辨率:生产者配置:max.block.ms = 1200000
(例如120秒,例如)
检查您的经纪人是否由于某些原因(例如,过多的负载)而关闭,以及为什么他们无法响应元数据请求。通常,您可以在server.log文件中看到它们。