Я провел тест с кодом ниже, чтобы отправить данные в 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. Но я не использовал имя хоста в коде производителя. Так что это не должно вызывать ошибку. Так почему имя хоста имеет значение?