如何修复 Kafka Docker 容器抛出 0.0.0.0/0.0.0.0:2181:连接被拒绝?
Posted
技术标签:
【中文标题】如何修复 Kafka Docker 容器抛出 0.0.0.0/0.0.0.0:2181:连接被拒绝?【英文标题】:How to fix Kafka Docker container from throwing 0.0.0.0/0.0.0.0:2181: Connection refused? 【发布时间】:2021-05-11 02:44:04 【问题描述】:我正在尝试为 Kafka 更改数据捕获设置 Docker 撰写文件环境,但遇到此错误:
正在打开与服务器 0.0.0.0/0.0.0.0:2181 的套接字连接。不会尝试使用 SASL 进行身份验证(未知错误)
发生套接字错误:0.0.0.0/0.0.0.0:2181:连接被拒绝
我一直在关注本教程https://hevodata.com/learn/kafka-cdc-postgres/,但它直接使用链接选项运行 docker 命令,而不是使用 docker-compose.yml 文件。
我试图转换这些:
docker run -it --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka
到下面的 docker-compose.yml 文件。但是,它似乎完全忽略了 KAFKA_ZOOKEEPER_CONNECT 环境变量,因为这是我在日志中看到的:
使用 ZOOKEEPER_CONNECT=0.0.0.0:2181
尽管如此,文档 https://github.com/debezium/docker-images/tree/master/kafka/1.5 表明它应该可以工作。
当我按照教程使用 docker run 而不是创建 docker-compose 文件时,它完全可以正常工作。它显示了我本地计算机的 IP 地址,端口为 2181,而不是 0.0.0.0:2181。
docker-compose.yml:
version: "3.7"
services:
postgres:
image: debezium/postgres:10
container_name: postgres
ports:
- "5000:5432"
environment:
POSTGRES_HOST_AUTH_METHOD: trust
# POSTGRES_USER: db_user
# POSTGRES_PASSWORD: db_password
zookeeper:
image: debezium/zookeeper:1.5
container_name: zookeeper
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
kafka:
image: debezium/kafka:1.5
container_name: kafka
ports:
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
connect:
image: debezium/connect:1.5
container_name: connect
ports:
- "8083:8083"
environment:
GROUP_ID: 1
CONFIG_STORAGE_TOPIC: my-connect-configs
OFFSET_STORAGE_TOPIC: my-connect-offsets
depends_on:
- postgres
- kafka
- zookeeper
networks:
default:
name: kafkaCDC
Zookeeper 容器上的 zoo.cfg:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data
dataLogDir=/zookeeper/txns
clientPort=2181
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
关注这个问题好几次了;但是,我完全迷路了。特别是,因为很多例子都在使用链接。
这是让我想到使用 KAFKA_ZOOKEEPER_CONNECT 的 GitHub 帖子。 https://github.com/wurstmeister/kafka-docker/issues/512#issuecomment-505905161
除了我之外,我觉得 https://github.com/debezium/docker-images/blob/master/kafka/1.5/docker-entrypoint.sh 忽略了环境变量有问题,但可能只是我不理解某些东西并且出现了 conf 错误。
【问题讨论】:
请分享您的 zoo.cfg 文件 @Ashok 添加了 zoo.cfg 文件 尝试增加最大客户端连接数 刚刚从文件中取消注释 maxClientCnxns=60 。所以它现在设置为 60 并且仍然不起作用,即使在重新启动后也是如此。我认为这本身不是 zookeeper 问题,因为 Kafka 容器甚至无法与 zookeeper 容器通信。我相信 0.0.0.0.0:2181 是问题所在,我只是不知道如何将其更改为 zookeeper:2181。此外,当我通过 docker run 运行它时,它可以与 maxClientCnxns 注释一起使用。 你有没有运行这个运行%ZOOKEEPER_HOME%\bin\zkserver.cmd 【参考方案1】:为了使debezium/kafka:1.5
图像在 docker compose 中工作,您可以尝试传递以下环境变量:
ZOOKEEPER_CONNECT: "zookeeper:2181"
它解决了我的问题,示例 docker compose yaml 如下:
version: "3.9"
services:
zookeeper:
image: debezium/zookeeper:1.5
ports:
- "2181:2181"
- "2888:2888"
kafka:
image: debezium/kafka:1.5
ports:
- "9092:9092"
environment:
ZOOKEEPER_CONNECT: "zookeeper:2181"
depends_on:
- zookeeper
【讨论】:
【参考方案2】:不要在 ENVIRONMENT
变量前加上 KAFKA_
这是我的工作集群:
version: '2'
services:
postgres:
image: debezium/postgres:13-alpine
container_name: postgres
hostname: postgres
environment:
POSTGRES_USER: nikamooz
POSTGRES_PASSWORD: nikamooz
ports:
- 5432:5432
zookeeper:
image: debezium/zookeeper
container_name: zookeeper
hostname: zookeeper
environment:
ZOOKEEPER_SERVER_ID: 1
ports:
- 2182:2181
- 2888:2888
- 3888:3888
volumes:
- ./data/zoo/data:/zookeeper/data
- ./data/zoo/log:/zookeeper/txns
kafka:
image: debezium/kafka
container_name: kafka
hostname: kafka
depends_on:
- zookeeper
ports:
- 9092:9092
environment:
ZOOKEEPER_CONNECT: zookeeper:2181
BOOTSTRAP_SERVERS: kafka:9092
volumes:
- ./data/kafka/data:/kafka/data
- ./data/kafka/logs:/kafka/logs
connect:
image: debezium/connect
container_name: connect
hostname: connect
depends_on:
- kafka
- postgres
ports:
- 8083:8083
environment:
GROUP_ID: holding_group
CONFIG_STORAGE_TOPIC: holding_storage_topic
OFFSET_STORAGE_TOPIC: holding_offset_topic
BOOTSTRAP_SERVERS: kafka:9092
【讨论】:
【参考方案3】:我可以通过将 zookeeper 连接地址设置为 docker 容器 IP 地址来修复它
获取 IP 地址运行
docker inspect <container-name> --format=' .NetworkSettings.IPAddress '
并按如下方式启动kafka
docker run --name some-kafka -p 9092:9092 -e KAFKA_ZOOKEEPER_CONNECT=<zookeeper-ip>:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://:9092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 confluentinc/cp-kafka
Thisgithub 评论帮助我找出了我错过了什么
【讨论】:
以上是关于如何修复 Kafka Docker 容器抛出 0.0.0.0/0.0.0.0:2181:连接被拒绝?的主要内容,如果未能解决你的问题,请参考以下文章