Kafka外部客户端获取地址与ADVERTISED_LISTENERS配置不符问题
Kafka局域网连接故障排查与解决
问题现象
局域网内Kafka Broker部署在cgw.local,客户端位于rpi.local,二者同连一台交换机。无论将Broker的advertised.listeners配置为PLAINTEXT://cgw.local:9092或PLAINTEXT://20.5.28.284:9092,也无论Python客户端BOOTSTRAP_SERVERS设置为['cgw.local']或['20.5.28.284:9092'],客户端成功订阅后都会抛出以下错误,且无法拉取消息:
WARNING:kafka.conn:DNS lookup failed for cgw:9092, exception was [Errno -2] Name or service not known. Is your advertised.listeners (called advertised.host.name before Kafka 9) correct and resolvable?
客户端尝试解析不存在的cgw地址,而实际可用地址为cgw.local或动态IP20.5.28.284。
问题根源
Broker配置文件中使用了错误的配置项前缀:kafka.listeners和kafka.advertised.listeners并非Kafka的合法配置项,正确的配置项名称应为listeners和advertised.listeners(不带kafka.前缀)。由于配置项不被识别,Kafka会使用默认的advertised地址——仅主机名cgw(不带.local后缀),导致客户端获取到错误的地址后解析失败。
解决步骤
- 修正Broker配置文件
将原配置中的前缀kafka.移除,修改后的配置如下:group.initial.rebalance.delay.ms=0 broker.id=0 log.dirs=/tmp/kafka-logs listeners=PLAINTEXT://0.0.0.0:9092 advertised.listeners=PLAINTEXT://cgw.local:9092 # 或替换为PLAINTEXT://20.5.28.284:9092 - 重启Kafka Broker
停止当前运行的Kafka服务,重新启动以加载新配置。 - 调整客户端配置(可选)
确保客户端BOOTSTRAP_SERVERS配置包含端口号,例如:BOOTSTRAP_SERVERS = ['cgw.local:9092'] # 或 BOOTSTRAP_SERVERS = ['20.5.28.284:9092']
完成以上操作后,客户端将获取到Broker正确的advertised地址,能够正常解析并拉取消息。
内容的提问来源于stack exchange,提问作者scriptfoo
相关产品推荐
相关产品推荐

