我目前对所有这些工具都还不熟悉,请您耐心对待我。
我正在尝试创建一个数据管道,将mysql数据库的更改推送到kafka代理。我大致上是按照教程来做的。如果所有docker容器(直接从debezium repos下载)都位于本地机器内,那么我就能够让系统运行。
但是,如果我将mysql、kafka和zookeeper dockers放在本地网络上的另一台机器上并尝试连接,则会出现以下错误:
docker: Error response from daemon: could not get container for zookeeper: No such container: zookeeper.
下面是我用来实现这一点的命令:
sudo docker run -it --rm --name connect \
-p 8083:8083 \
-e GROUP_ID=1 \
-e CONFIG_STORAGE_TOPIC=my_connect_configs \
-e OFFSET_STORAGE_TOPIC=my_connect_offsets \
-e ADVERTISED_HOST_NAME=192.168.31.214 \
-e ADVERTISED_PORT=2181 \
--link zookeeper:zookeeper \
--link kafka:kafka \
--link mysql:mysql \
debezium/connect:0.8
这两台机器可以通过涉及的所有端口相互通信(zookeeper为2181,kafka为9092,mysql为3306)。
我还尝试提供属性名称
-e ADVERTISED_PORT=2181
并将主机属性修改为
-e ADVERTISED_HOST_NAME=192.168.31.214:2181
两个都没用。
据我所知,有一些属性绑定个别链接到机器上的端口,但我找不到上述属性。请告诉我这件事哪里不对。
1条答案
按热度按时间6rqinv9w1#
我不认为
-e ADVERTISED_PORT=2181
对debezium容器来说是有意义的。这是一个zookeeper端口,它在别处运行,而不是在debezium内部。类似地,对于公布的主机名,这是一个kafka服务器属性,不是由debezium容器加载的(它也不应该使用端口2181)如果zookeeper和其他人在另一台机器上,那么——链接将不起作用。那个教程假设所有的东西都在一台机器上运行
如果你使用docker swarm,你需要设置并使用“覆盖网络”。
否则,您需要将debezium配置指向另一台机器的外部ip地址。但是,这并不是解决问题的“docker方法”,因为您不必知道您的容器运行在哪些主机上。