我正在使用一个由三个kafka节点组成的Kafka集群,它运行在已经启动并运行的zookeeper集群节点上,Docker-compose与kafka docker image version 2.2.0和zookeeper docker image version 3.5一起使用。
现在我的计划是使用Kafka 3.x的升级版本,它声称zookeeper是不需要的(可能是明确不需要的),我的印象是zookeeper将自动启动,但我看到Zookeeper是嵌入在kafka中的,所以我也需要显式启动它。
为此,我必须将Kafka 3.x重新打包成两个独立的docker图像。第一个图像ZOOKEEPER_IMAGE,将zoo-start.sh通过 Docker file 的CMD命令调用zookeeper的www.example.com,并设置动物园的特定参数。
相反,第二个图像Kafka_IMAGE将start.sh通过 Docker file 的CMD命令调用Kafka的www.example.com,并设置Kafka特定参数。CMD ["/start.sh”]
我还可以看到许多Kafka的参数被改变了,目前我得到了这个例外。
Kafka例外:无法将PLAINTEXT:127.0.0.1:解析为代理终结点-
请建议我,如果我是遵循正确的方法,是什么解决这个例外。
下面是一个Zookeeper和一个Kafka节点的代码。类似的方式在原来的码头组成,它包含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}
1条答案
按热度按时间unhi4e5o1#
以为Zookeeper会自动启动
不会的。Kafka克拉夫特使用的是拉夫特协议。Zookeeper根本不是必需的,所以没有启动。
Zookeeper被嵌入Kafka
Zookeeper服务器脚本是 * 可用的 *,但它们不以任何嵌入方式使用,也不自动使用。
将Kafka重新打包成两个单独的docker图像
例如,
bitnami/kafka
图像已经提供了KRaft模式。不清楚您当前使用的是什么图像。您的错误可能是因为
advertised.host.name
和port
都已作为Kafka属性删除。您应该使用listeners
和advertised.listeners
。