KafkaTimeoutError:60.0秒后无法更新元数据

时间:2020-06-04 15:37:59

标签: python apache-kafka kafka-producer-api kafka-python

我有一个高吞吐量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秒后无法更新元数据”。

我需要更改哪些设置才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

  1. 如果一个主题不存在,而您试图产生该主题,并且自动创建主题设置为false,则可能会发生。

    可能的解决方案::在代理配置(server.properties)auto.create.topics.enable=true中(注意,这在Confluent Kafka中是默认设置)

  2. 如果用Kafka代理更新元数据花费的时间超过60秒,则另一种情况可能是网络拥塞或速度过快。

    可能的分辨率:生产者配置:max.block.ms = 1200000(例如120秒,例如)

  3. 检查您的经纪人是否由于某些原因(例如,过多的负载)而关闭,以及为什么他们无法响应元数据请求。通常,您可以在server.log文件中看到它们。