[英]How to fix Kafka Docker container from throwing 0.0.0.0/0.0.0.0:2181: Connection refused?
我正在嘗試為 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 命令,而不是使用 ZBAEDB53E845AE71F13945AE90FCC0 文件。
我試圖轉換這些:
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 運行而不創建 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 錯誤。
要使debezium/kafka:1.5
圖像在 docker 組合中工作,您可以嘗試傳遞以下環境變量:
ZOOKEEPER_CONNECT: "zookeeper:2181"
它解決了我的問題,示例 docker 組成 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
不要在您的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
我可以通過將 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
這個github 評論幫助我找出了我所缺少的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.