kafka 发送消息报错:LEADER_NOT_AVAILABLE

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服务进行收发消息。请碰到过类似问题的解答下。






发表于: 28天前   最后更新时间: 28天前   游览量:152
上一条: 到头了!
下一条: 已经是最后了!

  • 只要增加 advertised.listeners=PLAINTEXT://服务器外网ip:9092 这项配置,就会上面的错误
    • 只配置了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
        • 配置:
          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
            • 说明你外网已经好了,现在是程序与kafka之间的错误了。
              还有其他错误吗?这个错误信息太少看不出来。先确认下客户端和kafka之间的版本是不是匹配。
                • 按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.

                    • 在服务器上用命令收发消息都正常的。命令:./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