Kafka消费者无法从外部Kafka服务器消费

时间:2018-05-21 15:43:18

标签: docker apache-kafka kafka-consumer-api

我让Zookeeper和Kafka在物理服务器上运行,我已经构建了一个运行java应用程序的docker容器,以便作为使用者连接到外部Kafka。

Kafka监听端口:

[helio@dev-01 kafka]$ netstat -an|grep 9092
tcp6       0      0 :::9092                 :::*                    LISTEN

我使用的是docker共享网络,但是消费者应用程序无法连接到kafka。 我可以看到我可以从容器内部到达kafka IP ...我试过一个简单的看到我可以从网络到达kafka服务器:

在Container:

root@ff419d41540a:~# ssh -p 9092 192.168.1.251

在Kafka日志中我可以看到测试连接:

[2018-05-21 12:33:39,093] WARN [SocketServer brokerId=0] Unexpected error from /172.17.0.2; closing connection (org.apache.kafka.common.network.Selector)
org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 1397966893 larger than 104857600)
        at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:132)
        at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:93)
        at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:235)
        at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:196)
        at org.apache.kafka.common.network.Selector.attemptRead(Selector.java:557)
        at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:495)
        at org.apache.kafka.common.network.Selector.poll(Selector.java:424)
        at kafka.network.Processor.poll(SocketServer.scala:628)
        at kafka.network.Processor.run(SocketServer.scala:545)
        at java.lang.Thread.run(Thread.java:748)

所以,这有什么限制吗?一些端口值限制?

如果我使用--network = host(主机网络)启动Consumer Docker容器,那么消费者应用程序就可以连接到Kafka并且工作正常。

由于

1 个答案:

答案 0 :(得分:0)

我可以在Kafka消费者库中启用更多日志,这样我就可以找出问题所在。 甚至使用IP:端口将Kafka服务器定义为在日志中显示:

16:34:04.670 [main] INFO  o.a.k.c.consumer.ConsumerConfig - ConsumerConfig     values:
        auto.commit.interval.ms = 5000
        auto.offset.reset = latest
        bootstrap.servers = [192.168.1.251:9092]

但另一个kafka消费者日志显示它正在获取主机名(物理服务器),一旦容器无法解析该名称,消费者就会失败:

16:34:08.861 [Consumer] INFO  o.a.k.c.c.i.AbstractCoordinator - [Consumer clientId=consumer-1, groupId=messageRouterConsumer] Group coordinator dev-01:9092 (id: 2147483647 rack: null) is unavailable or invalid, will attempt rediscovery

所以我可以解决这个问题,将kafka主机名服务器添加到容器/ etc / hosts中:

echo "192.168.1.251   dev-01" >> /etc/hosts

然后容器内的Kafka Consumer应用程序开始使用该主题。