From f5c64f946ec3458c8279792a0584c34c969ce490 Mon Sep 17 00:00:00 2001 From: vet Date: Mon, 13 Apr 2026 13:25:00 +0700 Subject: [PATCH] =?UTF-8?q?kafka=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 03-start-infra.sh | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/03-start-infra.sh b/03-start-infra.sh index e717cd8..fe838b2 100755 --- a/03-start-infra.sh +++ b/03-start-infra.sh @@ -67,9 +67,6 @@ if docker ps --format '{{.Names}}' | grep -q '^dev-kafka$'; then elif docker ps -a --format '{{.Names}}' | grep -q '^dev-kafka$'; then info "重新启动已有容器 dev-kafka..." docker start dev-kafka > /dev/null - info "等待 Kafka 就绪 (8s)..." - sleep 8 - success "Kafka 已启动 :${KAFKA_PORT}" else info "创建并启动 Kafka 容器(首次拉取镜像可能较慢)..." KAFKA_CLUSTER_ID="MkU3OEVBNTcwNTJENDM2Qk" @@ -91,13 +88,29 @@ else "${LOG_OPTS[@]}" \ bitnamilegacy/kafka:3.5.1 \ > /dev/null - - info "等待 Kafka 就绪 (15s)..." - sleep 15 - success "Kafka 容器已创建并启动 :${KAFKA_PORT}" fi start_docker_logger "dev-kafka" +# 等待 Kafka broker 真正就绪(轮询,最长 60s) +info "等待 Kafka broker 就绪..." +_kafka_ready=0 +for _i in $(seq 1 30); do + if docker exec dev-kafka kafka-topics.sh \ + --bootstrap-server localhost:9092 \ + --list &>/dev/null; then + _kafka_ready=1 + break + fi + printf " 第 %d 次探测...\r" "$_i" + sleep 2 +done +if [[ $_kafka_ready -eq 1 ]]; then + success "Kafka 已就绪 :${KAFKA_PORT}" +else + error "Kafka 60s 内未就绪,请检查日志: ./deploy-test/logs.sh kafka" + exit 1 +fi + # 初始化必要 Topics step "Kafka Topics 初始化" TOPICS=(toRedis toMongo toPush toOfflinePush) @@ -115,7 +128,7 @@ for topic in "${TOPICS[@]}"; do --replication-factor 1 \ 2>/dev/null \ && success " ✓ 创建 topic: $topic" \ - || warn " ✗ 创建失败: $topic(Kafka 未就绪,重试: ./deploy-test/03-start-infra.sh)" + || warn " ✗ 创建失败: $topic" fi done