首页 文章

Kafka客户端无法接收消息

提问于
浏览
1

我在远程机器上设置了kafka和zookeeper . 在那台机器上我可以看到下面在官方网站上使用测试方法 .

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic listings-incoming
This is a message
This is another message

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --listings-incoming --from-beginning
This is a message
This is another message

但是当我使用我的本地消费者脚本时,它无法正常工作:

bin/kafka-console-consumer.sh —bootstrap-server X.X.X.X:9092 —listings-incoming —from-beginning —consumer-property group.id=group2

没有看到消息显示但显示的是:

[2017-08-11 14:39:55,825] WARN自动提交抵消{listings-incoming-4 = OffsetAndMetadata {offset = 0,metadata =''},listings-incoming-2 = OffsetAndMetadata ,listing-incoming-3 = OffsetAndMetadata {offset = 0,metadata =''},listings-incoming-0 = OffsetAndMetadata {offset = 0,metadata =''},listings-incoming-1 = OffsetAndMetadata {对于组group1,offset = 0,metadata =''}}失败:由于该组已经重新 balancer 并将分区分配给另一个成员,因此无法完成提交 . 这意味着后续调用poll()的时间长于配置的max.poll.interval.ms,这通常意味着轮询循环花费了太多时间进行消息处理 . 您可以通过增加会话超时或通过max.poll.records减少poll()中返回的批量的最大大小来解决此问题 . (org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)

更新*****

我的zookeeper和kafka在同一台机器上运行,现在我在advertised.listeners上的配置是这样的:

advertised.listeners=PLAINTEXT://the.machine.ip.address:9092

我试着把它改成:

advertised.listeners=PLAINTEXT://my.client.ip.address:9092

然后运行客户端使用者脚本,它给出错误:

[2017-08-11 15:49:01,591] WARN在获取具有相关ID 3的元数据时出错:(org.apache.kafka.clients.NetworkClient)[2017-08-11 15:49 :22,106] WARN Bootstrap broker 10.161.128.238:9092已断开连接(org.apache.kafka.clients.NetworkClient)[2017-08-11 15:49:22,232] WARN获取具有相关ID 7的元数据时出错:(org.apache.kafka.clients.NetworkClient)[2017-08-11 15:49:22,340] WARN获取相关ID为8的元数据时出错:(org.apache.kafka.clients .NetworkClient)[2017-08-11 15:49:40,453] WARN Bootstrap broker 10.161.128.238:9092已断开连接(org.apache.kafka.clients.NetworkClient)[2017-08-11 15:49:40,531] WARN错误获取具有相关ID 12的元数据:(org.apache.kafka.clients.NetworkClient)

1 回答

  • 1

    您可能尚未在broker server.properties文件中正确配置 advertised.listeners .

    https://kafka.apache.org/documentation/

    advertised.listeners监听器发布到ZooKeeper以供客户端使用,如果不同于上面的监听器 . 在IaaS环境中,这可能需要与代理绑定的接口不同 . 如果未设置,则将使用侦听器的值 .

    并在相同的文件中

    listeners侦听器列表 - 我们将侦听的以逗号分隔的URI列表以及侦听器名称 . 如果侦听器名称不是安全协议,则还必须设置listener.security.protocol.map . 将主机名指定为0.0.0.0以绑定到所有接口 . 将hostname保留为空以绑定到默认接口 . 合法侦听器列表的示例:PLAINTEXT:// myhost:9092,SSL://:9091 CLIENT://0.0.0.0:9092,REPLICATION:// localhost:9093

    因此,如果没有设置advertised.listeners并且侦听器只是在侦听localhost:9092或127.0.0.1:9092或0.0.0.0:9092,那么当客户端向引导程序发出元数据请求时,将告知客户端连接到localhost服务器 . 当客户端实际在与代理运行的同一台机器上运行时,它会起作用,但是当您远程连接时它将失败 .

    您应将 advertised.listeners 设置为运行代理的主机的完全限定域名或公共IP地址 .

    例如

    advertised.listeners = PLAINTEXT://kafkabrokerhostname.confluent.io:9092

    要么

    advertised.listeners = PLAINTEXT://192.168.1.101:9092

相关问题