不能生产 – 或消费 – 从容器内运行的卡夫卡经纪人

configuration

我正在使用docker hub的confluent / kafka图像来启动两个独立容器中的zookeeperkafka实例。 我用来启动容器的命令如下:

docker run --rm --name zookeeper -p 2181:2181 confluent/zookeeper docker run --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper confluent/kafka 

我有两个容器zookeeperkafka现在运行。

请注意,我已经将容器的端口21819092映射到我的主机端口。 我通过在我的浏览器中尝试使用localhost:2181/9092来validation这个映射是否正常工作,并且在运行容器的terminal中出现了一些错误。

然后,我通过在主机中发出以下命令来创build主题:

 ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 

这是成功的,我通过使用以下命令列出主题来validation它:

 ./bin/kafka-topics.sh --list --zookeeper localhost:2181 

现在问题:

我正在尝试使用以下命令向代理发送一些消息:

 ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 

我收到以下exception:

 [2017-03-02 20:36:02,376] WARN Failed to send producer request with correlation id 2 to broker 0 with data for partitions [test,0] (kafka.producer.async.DefaultEventHandler) java.nio.channels.ClosedChannelException at kafka.network.BlockingChannel.send(BlockingChannel.scala:100) at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73) at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72) at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SyncProducer.scala:103) at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) at kafka.producer.SyncProducer$$anonfun$send$1.apply$mcV$sp(SyncProducer.scala:102) at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) at kafka.producer.SyncProducer.send(SyncProducer.scala:101) at kafka.producer.async.DefaultEventHandler.kafka$producer$async$DefaultEventHandler$$send(DefaultEventHandler.scala:255) at kafka.producer.async.DefaultEventHandler$$anonfun$dispatchSerializedData$2.apply(DefaultEventHandler.scala:106) at kafka.producer.async.DefaultEventHandler$$anonfun$dispatchSerializedData$2.apply(DefaultEventHandler.scala:100) at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:778) at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99) at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99) at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230) at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40) at scala.collection.mutable.HashMap.foreach(HashMap.scala:99) at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:777) at kafka.producer.async.DefaultEventHandler.dispatchSerializedData(DefaultEventHandler.scala:100) at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:72) at kafka.producer.async.ProducerSendThread.tryToHandle(ProducerSendThread.scala:105) at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:88) at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:68) at scala.collection.immutable.Stream.foreach(Stream.scala:594) at kafka.producer.async.ProducerSendThread.processEvents(ProducerSendThread.scala:67) at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:45) 

我读了一些在互联网上的线程,build议我更新我的主机文件。 如果是这样,我必须把我的主机文件放入什么?

还有一些线程build议我设置ADVERTISED_HOST条目来纠正configuration文件中的IP。 哪个configuration文件? 我在哪里进行更新?

如果是用于kafka经纪人的server.properties文件,那么我确实尝试进入由confluent / kafka图像创build的容器。 它看起来像这样:

 socket.send.buffer.bytes=102400 delete.topic.enable=true socket.request.max.bytes=104857600 log.cleaner.enable=true log.retention.check.interval.ms=300000 log.retention.hours=168 num.io.threads=8 broker.id=0 log4j.opts=-Dlog4j.configuration\=file\:/etc/kafka/log4j.properties log.dirs=/var/lib/kafka auto.create.topics.enable=true num.network.threads=3 socket.receive.buffer.bytes=102400 log.segment.bytes=1073741824 num.recovery.threads.per.data.dir=1 num.partitions=1 zookeeper.connection.timeout.ms=6000 zookeeper.connect=zookeeper\:2181 

任何build议如何克服这一点,并解决从我的主机可能从卡夫卡容器生产和消费?

非常感谢!!!

我能够在发布这个问题的几秒钟内弄清楚。

我必须通过签发代理程序所在的容器的HOSTNAME

 echo $HOSTNAME 

而且我使用环回条目更新了我的主机中的/ etc / hosts文件:

 127.0.0.1 KAFKA_CONTAINER_HOSTNAME 127.0.0.1 ZOOKEEPER_CONTAINER_HOSTNAME 

必须做同样的动物园pipe理员容器为了消费者也没有问题工作。

干杯!!!