我正在尝试使用此处提供的示例在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文件进行任何更改。
答案 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/