apache Kafka 3.X群集是否需要已启动的zookeeper

kxkpmulp  于 2023-01-29  发布在  Apache
关注(0)|答案(1)|浏览(273)

我正在使用一个由三个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}
unhi4e5o

unhi4e5o1#

以为Zookeeper会自动启动
不会的。Kafka克拉夫特使用的是拉夫特协议。Zookeeper根本不是必需的,所以没有启动。
Zookeeper被嵌入Kafka
Zookeeper服务器脚本是 * 可用的 *,但它们不以任何嵌入方式使用,也不自动使用。
将Kafka重新打包成两个单独的docker图像
例如,bitnami/kafka图像已经提供了KRaft模式。不清楚您当前使用的是什么图像。
您的错误可能是因为advertised.host.nameport都已作为Kafka属性删除。您应该使用listenersadvertised.listeners

相关问题