Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker Kafka使用者无法从外部Kafka服务器访问使用者_Docker_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

Docker Kafka使用者无法从外部Kafka服务器访问使用者

Docker Kafka使用者无法从外部Kafka服务器访问使用者,docker,apache-kafka,kafka-consumer-api,Docker,Apache Kafka,Kafka Consumer Api,我让Zookeeper和Kafka在物理服务器上运行,并构建了一个docker容器,运行java应用程序以连接外部Kafka作为消费者 卡夫卡侦听端口: [helio@dev-01 kafka]$ netstat -an|grep 9092 tcp6 0 0 :::9092 :::* LISTEN 我正在使用docker共享网络,但消费者应用程序无法连接到kafka。 我可以看到我可以从容器内部到达卡夫

我让Zookeeper和Kafka在物理服务器上运行,并构建了一个docker容器,运行java应用程序以连接外部Kafka作为消费者

卡夫卡侦听端口:

[helio@dev-01 kafka]$ netstat -an|grep 9092
tcp6       0      0 :::9092                 :::*                    LISTEN
我正在使用docker共享网络,但消费者应用程序无法连接到kafka。 我可以看到我可以从容器内部到达卡夫卡IP。。。我尝试了一个简单的方法,以确保我可以通过网络访问卡夫卡服务器:

集装箱:

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(host-network)启动Consumer-Docker容器,那么Consumer应用程序就能够连接到Kafka并正常工作


谢谢

我可以在卡夫卡消费者图书馆上启用更多日志,这样我就可以找出问题所在。 即使使用IP:Port来定义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主机名服务器添加到container/etc/hosts中的问题:

echo "192.168.1.251   dev-01" >> /etc/hosts
然后容器中的Kafka消费者应用程序开始从主题开始消费