【发布时间】:2020-01-13 08:07:10
【问题描述】:
我使用下面的代码进行了测试,以将数据发送到主题。卡夫卡是
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
然后我的代码就可以向我的主题发送数据了
如果我像这样更改默认的服务器配置:
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 主机名。但我也没有在生产者代码中使用主机名。所以它不应该导致错误。那么为什么主机名很重要呢?
【问题讨论】:
-
你从哪里得到“第二个将默认使用主机名”?我很确定它会使用
localhost。