我很难排除故障,应该是一个简单的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, value: 2 bytes with error: Batch Expired (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
我似乎无法找到任何kafka-log4j-logs ...
我按照quick-start中描述的方式运行kafka服务器
我可以创建主题并描述它 .
一个可能很重要的注意事项是kafka和zookeeper在docker-container中运行( 172.17.0.21
)我正在创建主题并从主机发送消息 .
请注意,(kafka-server)9092和(zk)2181都是开放的,可以从主机访问,我已经使用netstat和telnet确认了这一点 .
3 回答
原来是更多的Docker问题......
好的,当运行客户端
kafka-console-consumer.sh
时,我看到它正在尝试使用容器的名称(这是GUID的前几个字符)连接到代理 .我的主机无法使用主机名解析与docker-container的连接 .
由于我已将端口映射到主机,因此我将kafak-server config的
advertised.host.name
更改为指向主机的IP地址 .这样一旦每次查询zk我的主机的IP地址被返回,然后通过端口转发我连接到docker中的代理 .
我正在尝试使用docker中的kafka 0.10.0.0并在下面找到
所以设置advertised.listeners = PLAINTEXT:// yourhost:9092将起作用
顺便说一句,你知道你可以从
docker run
命令设置该变量,对吗?例如 . 这就是我在单个容器中为我的本地开发环境启动Kafka和ZK的方法:
然后,创建一个主题:
这是在OS X上,这就是我使用
docker-machine ip MACHINE_NAME
的原因 .如你所见,那个_1237584的图像 . 虽然上次我检查时没有
v0.9
,但是将Dockerfile
分叉并调整为0.9
是微不足道的 .