Почему Кафка заботится о имени хоста? - PullRequest
0 голосов
/ 13 января 2020

Я провел тест с кодом ниже, чтобы отправить данные в topi c. Кафка:

kafka_2.12-1.1.0

Код:

import kafka
print(kafka.version.__version__)
from kafka import KafkaProducer 
producer = KafkaProducer(
    bootstrap_servers=['172.25.44.238:9092'],
    sasl_mechanism="PLAIN",
    api_version=(0, 10),
    retries=2
)
f = producer.send("test", "some")
f.get()

Если я изменю конфигурацию сервера следующим образом:

listeners=PLAINTEXT://172.25.44.238:9092

Тогда мой код может отправить данные на мой topi c

Если я изменю конфигурацию сервера следующим образом:

listeners=PLAINTEXT://:9092

Тогда мой код выдаст ошибку:

kafka.errors.KafkaTimeoutError: KafkaTimeoutError: Batch for TopicPartition(topic='test', partition=0) containing 1 record(s) expired: 30 seconds have passed since batch creation plus linger time

Разница что секунда будет использовать имя хоста по умолчанию. И да, моя машина с кодом производителя не может восстановить имя хоста kafka. Но я не использовал имя хоста в коде производителя. Так что это не должно вызывать ошибку. Так почему имя хоста имеет значение?

1 Ответ

0 голосов
/ 13 января 2020

Я думаю, вы неправильно понимаете концепцию "начальной загрузки".

Адрес, который вы предоставляете, устанавливает только первоначальное соединение. Адрес, который клиенты на самом деле используют, определяется advertised.listeners.

. listeners всегда должен быть ://0.0.0.0, по моему мнению, тогда вы используете настройки брандмауэра на уровне ОС для ограничения доступ. Да, по умолчанию используется имя хоста, и это означает, что только хост может общаться с брокером

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...