KafkaTimeoutError('60.0 秒后无法更新元数据。')

Dol*_*hin 5 python apache-kafka kafka-python

我正在使用Python 3.6编写一个Kafka生产者,Python-kafka客户端版本是1.4.4\xe3\x80\x82Kafka版本是:2.1.0和1.1.1(尝试了两个版本),但是当我写一条消息时向生产者抛出此错误:

\n\n
KafkaTimeoutError(\'Failed to update metadata after 60.0 secs.\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的客户端代码:

\n\n
producer = KafkaProducer(\n  bootstrap_servers=[\'mq-server:9092\'],\n  api_version = (0,10,2,0) # solve no broker error\n)\n\nproducer.send("dolphin-test".encode(\'utf-8\'),b"test")\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我修改的服务器配置:

\n\n
listeners=PLAINTEXT://10.142.0.2:9092\nadvertised.listeners=PLAINTEXT://10.142.0.2:9092\n
Run Code Online (Sandbox Code Playgroud)\n\n

当使用脚本生成和使用消息时,它工作正常!这是客户端跟踪输出:

\n\n
D:\\project\\souce\\pydolphin-service>D:/Programs/Python/Python37/python.exe d:/project/souce/pydolphin-service/dolphin/producer.py\nTraceback (most recent call last):\n  File "d:/project/souce/pydolphin-service/dolphin/producer.py", line 14, in <module>\n    future = producer.send(\'my-topic\', b\'raw_bytes\')\n  File "D:\\Programs\\Python\\Python37\\lib\\site-packages\\kafka\\producer\\kafka.py", line 555, in send\n    self._wait_on_metadata(topic, self.config[\'max_block_ms\'] / 1000.0)\n  File "D:\\Programs\\Python\\Python37\\lib\\site-packages\\kafka\\producer\\kafka.py", line 682, in _wait_on_metadata\n    "Failed to update metadata after %.1f secs." % (max_wait,))\nkafka.errors.KafkaTimeoutError: KafkaTimeoutError: Failed to update metadata after 60.0 secs.\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在从 google & baidu & yandex 进行搜索。

\n

Dol*_*hin 1

调整公布的配置:

advertised.listeners=PLAINTEXT://external-ip:9092
Run Code Online (Sandbox Code Playgroud)

修改NAT内网ip为公网ip。因为生产者会向这个地址发送消息。制作人只能访问公众。