![](/img/trans.png)
[英]Apache Kafka cluster not connecting to Zookeeper on Docker
[英]whether apache Kafka 3.X cluster requires already started zookeeper or not
我正在使用一个由三个 kafka 节点组成的 kafka 集群,它在已经启动并运行的节点的 zookeeper 集群上运行。 Docker-compose 与 kafka docker 映像版本 2.2.0 和 zookeeper docker 映像版本 3.5 一起使用。
现在我的计划是使用kafka 3.x的升级版本,其中声称不需要zookeeper(可能明确不需要)。 我的印象是 zookeeper 会自动启动。 但是我看到 Zookeeper 嵌入在 kafka 中,所以我也需要显式启动它。
为此,我必须将 kafka 3.x 重新打包成两个单独的 docker 图像。 第一张图片 ZOOKEEPER_IMAGE,会通过Docker 文件的 CMD 命令调用 zookeeper 的 zoo-start.sh 并设置动物园具体参数。
第二张图片 KAFKA_IMAGE 相反,会通过Docker 文件的 CMD 命令调用 kafka 的 start.sh 并设置 kafka 特定参数。 CMD ["/start.sh"]
我还可以看到许多 kafka 参数已更改,目前我收到此异常。
KafkaException:无法将 PLAINTEXT://127.0.0.1: 解析为代理端点 -
请建议我是否遵循正确的方法以及此异常的解决方案是什么。
下面是一个 zookeeper 和一个 Kafka 节点的代码。 类似原来docker compose的方式,包含3个kafka,3个zookeeper节点
zookeeper:
hostname: ${HOST_IP}
image: ${ZOOKEEPER_IMAGE}
container_name: zookeeper
command: /bin/bash -c "/start.sh"
volumes:
- ${VOLUMES_FOLDER}/zk/data:/data
- ${VOLUMES_FOLDER}/zk/conf:/conf
network_mode: "host"
ports:
- 0.0.0.0:${ZOOKEEPER_EXPOSED_PORT}:${ZOOKEEPER_EXPOSED_PORT}
kafka1:
hostname: ${HOST_IP}
image: ${KAFKA_IMAGE}
depends_on:
- zookeeper
container_name: kafka1
command: /bin/bash -c "/start.sh"
volumes:
- ${VOLUMES_FOLDER}/kf/1/logs:/logs
- ${VOLUMES_FOLDER}/kf/1/data:/data
environment:
- KAFKA_ADVERTISED_HOST_NAME=${HOST_IP}
- KAFKA_DELETE_TOPIC_ENABLE=true
- KAFKA_BROKER_ID=10
- port = ${KAFKA1_EXPOSED_PORT}
- ZOOKEEPER_IP=${HOST_IP}
- JMX_PORT=7208
network_mode: "host"
ports:
- 0.0.0.0:${KAFKA1_EXPOSED_PORT}:${KAFKA1_EXPOSED_PORT}
印象中 zookeeper 会自动启动
它不会。 Kafka KRaft 使用 Raft 协议。 根本不需要 Zookeeper,因此不会启动。
Zookeeper 嵌入kafka
它不是。 Zookeeper 服务器脚本可用,但它们不会以任何嵌入式方式或自动使用。
将 kafka 3.x 重新打包成两个单独的 docker 图像
例如, bitnami/kafka
图像已经提供了 KRaft 模式。 不清楚您当前使用的是什么图像。
您的错误可能是因为advertised.host.name
和port
都作为 Kafka 属性被删除了。 您应该使用listeners
和advertised.listeners
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.