У меня есть виртуальная машина Ubuntu в облаке, где я скачал Kafka версии 2.8.1 из Официальный сайт Кафки и следовал инструкциям в Официальное краткое руководство по Kafka.
Я использую клиент Python для использования одной из тем, которые я создал как часть краткого руководства. Когда я запускаю его на виртуальной машине, все работает нормально, однако, когда я запускаю ту же программу в своей локальной системе, я получаю следующую ошибку.
Unable connect to node with id 0: [Errno 8] nodename nor servname provided, or not known
Traceback (most recent call last):
...
...
File "/Path/python3.9/site-packages/aiokafka/client.py", line 547, in check_version
raise KafkaConnectionError(
kafka.errors.KafkaConnectionError: KafkaConnectionError: No connection to node with id 0
Программа Python, которую я использую:
import asyncio
import aiokafka
async def consume(self):
consumer = aiokafka.AIOKafkaConsumer(
"quickstart-events", bootstrap_servers = "IP:9092"
)
try:
await consumer.start()
async for msg in self.consumer:
print(
"consumed: ",
msg.topic,
msg.partition,
msg.offset,
msg.key,
msg.value,
msg.timestamp,
)
finally:
await consumer.stop()
asyncio.run(consume())
Я убедился, что необходимые порты (9022) в Ubuntu открыты - Я проверил, что могу подключиться через telnet к порту 9022 из моей локальной системы.
Я не уверен, что может быть причиной того, что я не могу получить доступ к Kafka через Интернет. Я упускаю что-то очевидное?
Измените следующий атрибут в config/server.properties
на адрес сервера начальной загрузки, который вы используете в своем коде.
advertised.listeners = PLAINTEXT://IP or FQDN:9092
Они не обязательно должны совпадать в клиентском коде, просто загрузочный адрес и объявленные адреса разрешаются из клиентской сети. Например, загрузочный адрес может быть одним балансировщиком нагрузки, который связывается с брокером и возвращает свой фактический удаленный адрес.