在Windows docker工具箱上运行融合平台时,kafka connect datagen出现问题

时间:2019-07-08 18:53:16

标签: docker apache-kafka apache-kafka-connect confluent

我正在尝试使用此处提供的示例在docker for Windows(工具箱)上运行一个最低限度的融合社区示例:

https://docs.confluent.io/current/quickstart/cos-docker-quickstart.html

,但是似乎所有组件都只能启动,只有ksql-datagen失败了,

$ docker-compose.exe ps
The system cannot find the path specified.
     Name                    Command               State                         Ports
------------------------------------------------------------------------------------------------------------
broker            /etc/confluent/docker/run        Up       0.0.0.0:29092->29092/tcp, 0.0.0.0:9092->9092/tcp
connect           bash -c if [ ! -d /usr/sha ...   Up       0.0.0.0:8083->8083/tcp, 9092/tcp
control-center    /etc/confluent/docker/run        Up       0.0.0.0:9021->9021/tcp
ksql-cli          /bin/sh                          Up
ksql-datagen      bash -c echo Waiting for K ...   Exit 1
ksql-server       /etc/confluent/docker/run        Up       0.0.0.0:8088->8088/tcp
rest-proxy        /etc/confluent/docker/run        Up       0.0.0.0:8082->8082/tcp
schema-registry   /etc/confluent/docker/run        Up       0.0.0.0:8081->8081/tcp
zookeeper         /etc/confluent/docker/run        Up       0.0.0.0:2181->2181/tcp, 2888/tcp, 3888/tcp

我尝试查看日志

$ docker日志ksql-datagen

并出现此异常,似乎它正在尝试使用与当前使用的IP地址不同的

[kafka-admin-client-thread | adminclient-1] WARN org.apache.kafka.clients.NetworkClient - [AdminClient clientId=adminclient-1] Connection to node -1 (broker/172.18.0.3:29092) could not be established. Broker may not be available.

如果我们使用Windows工具箱,我怀疑URL应该是192.168.99.100,并且它应该在Windows主机网络中运行。

希望能帮助您了解默认设置为何不起作用的原因,我们是否需要对docker-compose.yaml文件进行任何更改。

1 个答案:

答案 0 :(得分:0)

TL; DR -您的问题似乎是ksql-datagen无法找到您的kafka经纪人。您可能需要将经纪人的advertised.listeners属性设置为http://broker:9092(或将docker的kafka属性设置为KAFKA_ADVERTISED_LISTENERS) (请参见此处的advertised.listeners-https://docs.confluent.io/current/installation/configuration/broker-configs.html

好答案- 每个经纪人(也许还有其他模块)都在该属性中公开其“地址”-这样客户就可以找到它们。他们可以公开本地docker地址-由在同一docker网络上运行的客户端访问(例如,在地址kafka0:9092上,其中kafka0是内部docker别名),localhost-由在同一主机上但在外部运行的客户端访问网络(例如localhost:9092),或者它们可以公开主机的真实IP(供外部世界的客户端访问,例如blabla.com:9092)。

有关完整而详尽的解释,我建议由开发人员@ confluent撰写的精彩文章- https://rmoff.net/2018/08/02/kafka-listeners-explained/