我正在嘗試使用 shell 腳本檔案在 Docker 中運行的 Kafka 容器中創建一個主題。
docker-compose.yml
---
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ports:
- "22181:2181"
kafka:
image: confluentinc/cp-kafka:latest
container_name: kafka
depends_on:
- zookeeper
ports:
- "29092:29092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
初始化檔案
#!/bin/zsh
docker compose up -d
docker exec kafka kafka-topics --create --bootstrap-server localhost:29092 --partitions 1 --replication-factor 1 --topic Test
當我運行 docker-compose 時,容器啟動正常,但主題創建失敗。
[2021-11-04 17:35:07,957] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:29092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
但是,當我在命令列中運行相同的命令時,沒有任何更改,它可以正常作業并創建主題。
Created topic Test.
我不知所措,在這里閱讀有關類似問題的先前問題并沒有幫助:大多數是由于拼寫錯誤或在不需要的地方添加了引號。我試過改變 #! bash、sh 和 usr/bin/env(以及其他)無濟于事。
任何幫助表示贊賞。
Docker 版本:版本 20.10.8 在 Mac 上運行(英特爾)
uj5u.com熱心網友回復:
正如錯誤訊息所建議的那樣,代理不可用(在您的情況下它尚未啟動)。您可以等待代理完成啟動程序(通過docker logs -f kafka在腳本中查看日志或使用睡眠),然后運行您的命令來創建主題:
docker exec kafka kafka-topics --create --bootstrap-server localhost:29092 --partitions 1 --replication-factor 1 --topic Test
或者,您不必弄清楚您的經紀人是否已完成初始化程序,您可以使用類似官方 Confluent 示例的內容。在這個例子中,一個實用程式用于等待 Kafka 集群準備就緒。
uj5u.com熱心網友回復:
你在哪里/什么時候運行init.sh腳本?也許經紀人還沒有開始。
此外,當您想在 Docker 網路內運行命令時,請使用內部偵聽器
docker-compose exec kafka \
bash -c "kafka-topics --create --bootstrap-server kafka:9092 --partitions 1 --replication-factor 1 --topic Test"
uj5u.com熱心網友回復:
調整 init.sh
運行容器,docker-compose up -d等待代理運行。如果應用程式已啟動并正在運行,請檢查日志。
現在init.sh應該只有create the topic command
#!/bin/zsh
docker exec kafka kafka-topics --create --bootstrap-server localhost:29092 --partitions 1 --replication-factor 1 --topic Test1
docker exec kafka kafka-topics --create --bootstrap-server localhost:29092 --partitions 1 --replication-factor 1 --topic Test2
docker exec kafka kafka-topics --create --bootstrap-server localhost:29092 --partitions 1 --replication-factor 1 --topic Test3
uj5u.com熱心網友回復:
每個人都是對的,我不得不等待更長時間(我已經嘗試了 10 秒)。
正如@Luigi Cerone 所建議的那樣,我曾經cub通過在創建主題之前添加以下行來等待 Kafka 準備就緒:
docker exec kafka cub kafka-ready -b localhost:29092 1 20
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352414.html
標籤:码头工人 贝壳 阿帕奇卡夫卡 docker-compose
上一篇:結構陣列僅采用C中的最后一個值
