kafka 发送消息报错:LEADER_NOT_AVAILABLE

Jeff 发表于: 2019-02-18   最后更新时间: 2019-02-18 18:09:52   14,732 游览

1:kafka版本:kafka_2.11-2.1.0

2:server.config配置

############### Socket Server Settings ###############
 listeners=PLAINTEXT://内网ip:9092
 advertised.listeners=PLAINTEXT://服务器外网ip:9092

3:问题描述:可以成功创建topic。用户下面命令发送消息报错

./kafka-console-producer.sh --broker-list 内网ip:9092 --topic kk

报错信息:Error while fetching metadata with correlation id 1 : {kk=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

4:尝试过:不配置advertised.listeners 参数,
只配置:listeners=PLAINTEXT://内网ip:9092,服务器本地可以正常收发消息。

问题是现在需要通过外网,链接kafka服务进行收发消息。请碰到过类似问题的解答下。

发表于 2019-02-18
添加评论

只要增加

advertised.listeners=PLAINTEXT://服务器外网ip:9092

这项配置,就会上面的错误

半兽人 -> Jeff 5年前

listeners配置了内网,外网默认就可以用了。

Jeff -> 半兽人 5年前

只配置了

listeners=PLAINTEXT://内网ip:9092

我本地通过telnet服务器的9092,能正常访问。说明:listeners配置了内网,外网默认就可以用。

但是通过springboot工程访问就报:

[org.springframework.kafka.KafkaListenerEndpointContainer#0-9-C-1] WARN o.apache.kafka.clients.NetworkClient :
[Consumer clientId=consumer-10, groupId=testq] Connection to node 0 could not be established. Broker may not be available

spring-kafka版本:1.0.2
springboot版本:2.0.2
jdk:1.8.0_181

Jeff -> Jeff 5年前

配置:

kafka.consumer.servers=服务器外网地址:9092
kafka.consumer.enable.auto.commit=true
kafka.consumer.session.timeout=6000
kafka.consumer.auto.commit.interval=100
kafka.consumer.auto.offset.reset=latest
kafka.consumer.topic=testq
kafka.consumer.group.id=testq
kafka.consumer.concurrency=10

kafka.producer.servers=服务器外网地址:9092
kafka.producer.retries=0
kafka.producer.batch.size=4096
kafka.producer.linger=1
kafka.producer.buffer.memory=40960
半兽人 -> Jeff 5年前

说明你外网已经好了,现在是程序与kafka之间的错误了。
还有其他错误吗?这个错误信息太少看不出来。先确认下客户端和kafka之间的版本是不是匹配。

Jeff -> 半兽人 5年前

按spring的文档,kafka_2.11-2.1.0 可以使用spring-kafka:1.0.2 的版本,所以应该不是版本的问题。

服务启动日志看:先报了下面的错误,

[Consumer clientId=consumer-10, groupId=testq] Error while fetching metadata with correlation id 2 : {testq=LEADER_NOT_AVAILABLE}

之后就周期报下面的错误:

10:03:40.851 [org.springframework.kafka.KafkaListenerEndpointContainer#0-7-C-1] WARN o.apache.kafka.clients.NetworkClient :
[Consumer clientId=consumer-8, groupId=testq] Connection to node 0 could not be established. Broker may not be available.
10:03:40.885 [org.springframework.kafka.KafkaListenerEndpointContainer#0-3-C-1] WARN o.apache.kafka.clients.NetworkClient :
[Consumer clientId=consumer-4, groupId=testq] Connection to node 0 could not be established. Broker may not be available.
10:03:41.089 [org.springframework.kafka.KafkaListenerEndpointContainer#0-6-C-1] WARN o.apache.kafka.clients.NetworkClient :
[Consumer clientId=consumer-7, groupId=testq] Connection to node 0 could not be established. Broker may not be available.
10:03:41.416 [org.springframework.kafka.KafkaListenerEndpointContainer#0-1-C-1] WARN o.apache.kafka.clients.NetworkClient :
[Consumer clientId=consumer-2, groupId=testq] Connection to node 0 could not be established. Broker may not be available.

半兽人 -> Jeff 5年前

先用命令进行生产和发送,看看集群是否正常。

Jeff -> 半兽人 5年前

在服务器上用命令收发消息都正常的。命令:

./kafka-console-consumer.sh --bootstrap-server 172.17.108.105:9092 --topic testq --from-beginning

刚看到springboot工程启动日志,kafka服务返回的地址是:172.17.108.105:9092。说明,kafka服务返回的地址是个内网地址,所有连接不上。怎样才能返回外网连接的地址?

[Consumer clientId=consumer-4, groupId=testq] Group coordinator 172.17.108.105:9092 (id: 2147483647 rack: null) is unavailable or invalid, will attempt rediscovery

半兽人 -> Jeff 5年前

麻烦了,简单点用域名吧,配host就行了。

你的答案

查看kafka相关的其他问题或提一个您自己的问题