0

我目前对所有这些工具都是新手,请您多多包涵。

我正在尝试创建一个数据管道来将 MySQL DB 的更改推送到 Kafka Broker。我正在松散地尝试按照此处的教程进行操作。如果所有 docker 容器(直接从 debezium repos 下载)都位于本地机器内,我可以让系统运行。

但是,如果我将 MySQL、Kafka 和 Zookeeper docker 放在本地网络上的另一台机器上并尝试连接它,我会收到以下错误:

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

两者都没有帮助。

据我了解,有一些属性可以将单个链接绑定到机器上的端口,但我找不到所述属性。请让我知道我哪里出了问题。

4

1 回答 1

1

我认为-e ADVERTISED_PORT=2181Debezium 容器没有意义。那是一个 Zookeeper 端口,它在其他地方运行,而不是在 Debezium 内部。同样,对于广告主机名,这是一个 Kafka 服务器属性,没有被 Debezium 容器加载(它也不应该使用端口 2181)

如果 Zookeeper 和其他人在另一台机器上,那么 --link 将不起作用。该教程假设一切都在一台机器上运行

如果您使用的是 Docker Swarm,则需要设置和使用“覆盖网络”。

否则,您需要将您的 Debezium 配置指向另一台机器的外部 IP 地址。但是,这不是解决问题的“Docker 方式”,因为您不必知道容器在哪些主机上运行。

于 2018-08-09T00:18:09.920 回答