Kafka-Docker-从主机向容器发送消息时出错(批处理已过期)

Kafka-Docker-从主机向容器发送消息时出错(批处理已过期),docker,apache-kafka,Docker,Apache Kafka,我很难排除故障,什么应该是一个简单的卡夫卡问题 我正试图发布来自kafak console producer的一些消息。当我键入“hi”时,我得到: /opt/kafka/bin/kafka-console-producer.sh --topic test --broker-list 172.17.0.21:9092 hi [2016-01-25 12:56:19,839] ERROR Error when sending message to topic test with key: null

我很难排除故障,什么应该是一个简单的卡夫卡问题

我正试图发布来自
kafak console producer
的一些消息。当我键入“hi”时,我得到:

/opt/kafka/bin/kafka-console-producer.sh --topic test --broker-list 172.17.0.21:9092
hi
[2016-01-25 12:56:19,839] ERROR Error when sending message to topic test with key: null, value: 2 bytes with error: Batch Expired (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
我似乎找不到任何卡夫卡日志4J日志

我正在按照中描述的方式运行kafka服务器

我可以创建主题并描述它

有一点可能很重要,那就是kafka&zookeeper正在docker容器中运行(
172.17.0.21
),我正在创建主题并从主机发送消息



请注意,(kafka服务器)9092和(zk)2181都是开放的,并且可以从主机访问,我已经用netstat和telnet确认了这一点。

结果更多的是Docker问题

好的,当运行客户机
kafka console consumer.sh
时,我看到它试图使用容器名称(GUID的前几个字符)连接到代理

我的主机无法解析使用主机名连接到docker容器

因为我已经将端口映射到我的主机,所以我更改了kafak服务器配置的
advised.host.name
以指向我主机的IP地址


这样,每当zk被查询到代理时,我的主机的IP地址就会被返回,然后通过端口转发,我就连接到docker中的代理。

顺便说一句,您知道可以通过
docker run
命令设置该变量,对吗

例如,这就是我如何在单个容器中为本地开发环境启动Kafka&ZK的方法:

docker run --name st-kafka -p 2181:2181 -p 9092:9092 -e ADVERTISED_HOST=`docker-machine ip machine_name` -e ADVERTISED_PORT=9092 -d spotify/kafka
然后,要创建一个主题:

docker exec -ti st-kafka bash -c "/opt/kafka_*/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 4 --topic topic_name"
这是在OSX上,这就是为什么我使用
docker machine ip machine\u NAME


正如你所看到的,这就是Spotify的形象。虽然上次我检查时没有
v0.9
,但分叉
Dockerfile
并调整
0.9

很简单,我正在docker中尝试使用kafka 0.10.0.0,如下所示

advised.host.name已弃用:仅当
播发.listeners
或未设置侦听器。改为使用播发的侦听器。 要发布到ZooKeeper以供客户端使用的主机名。在IaaS中 在环境中,这可能需要与到的接口不同 经纪人有约束力。如果未设置,它将使用
host.name
如果已配置。否则,它将使用返回的值 来自java.net.InetAddress.getCanonicalHostName()


因此,设置adverted.listeners=PLAINTEXT://yourhost:9092将起作用

哪个版本的卡夫卡?运行公共Docker映像还是您自己创建的映像?您用来启动容器的
docker run
命令是什么?您是否更改了默认的卡夫卡配置?你是在一个单独的容器中运行ZK吗?@MarkoBonaci-这个问题让我丧命,但我学到了一些宝贵的教训。这是我自己的码头工人形象。发布了一个答案。是的,
advised.host.name
是我最初的想法(),但我想在提到它之前获得更多信息。您是否在docker容器中的kafka服务器配置中更改了它?谢谢。我建立了自己的形象…我没有使用spotify。