fuz*_*zzi 5 apache-kafka docker apache-zookeeper
我想同时使用confluent/kafka并confluent/zookeeper在单个 Ubuntu 服务器上运行它们。
我正在使用以下配置:
docker run -e ZOOKEEPER_CLIENT_PORT=2181 --name zookeeper confluent/zookeeper
docker run --name kafka -e KAFKA_ADVERTISED_HOST_NAME=kafka -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_CREATE_TOPICS=testtopic:1:1 confluent/kafka
但是这会导致:无法连接到zookeeper:2181
我有其他想要连接的容器,如何通过 zookeeper:2181 访问 zookeeper 和通过 kafka:9092 访问 kafka?
有多种方法可以做到这一点。但是在我们研究它之前,您需要了解您的方法中有两个问题
zookeper当您使用时,主机无法访问,docker run因为每个容器都在不同的网络隔离中运行kafka可能会启动并尝试连接zookeeper但zookeeper尚未准备好你可以做很多事情来解决问题
用于--net=host在主机网络上运行
使用docker network create <name>然后--net=<name>在启动两个容器时使用
或者您可以在zookeeper容器网络上运行您的 kafka 容器。
--net=container:zookeeper启动kafka容器时使用。这将确保zookeeper主机可访问。除非您有充分的理由这样做,否则不建议这样做。因为一旦zookeeper容器出现故障,您的kafka容器的网络也会出现故障。但为了理解起见,我把这个选项放在这里
您可以在启动zookeeper和之间保持一个间隙kafka,以确保kafka启动zookeeper和运行时
另一种选择是在--restart=on-failuredocker run 中使用标志。这将确保容器在失败时重新启动,并尝试重新连接zookeeper,希望时间到zookeeper了。
而不是使用docker run我总是更喜欢docker-compose让这样的链接容器运行。您可以通过创建一个简单的docker-compose.yml文件然后运行它来做到这一点docker-compsoe up
version: "3.4"
services:
zookeeper:
image: confluent/zookeeper
environment:
- ZOOKEEPER_CLIENT_PORT=2181
kafka:
image: confluent/kafka
environment:
- KAFKA_ADVERTISED_HOST_NAME=kafka
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_CREATE_TOPICS=testtopic:1:1
depends_on:
- zookeeper
restart: on-failure
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4294 次 |
| 最近记录: |