【问题标题】:Kafka docker image that works without zookeepr无需 Zookeeper 即可工作的 Kafka docker 映像
【发布时间】:2022-02-17 21:10:38
【问题描述】:

我读到Kafka不再需要zookeeper,所以我不想在docker-compose中有zookeeper。但我不知道哪个 kafka 图像可以在没有 zookeeper 的情况下工作。谁能给个提示?

【问题讨论】:

  • 您可以使用包含两者的容器,例如 fast-data-dev,但这会产生单点故障
  • 最近发布的 Apache Kafka 2.8 支持 KRaft 模式的预览模式,这是它不使用 Zookeeper 的地方:github.com/apache/kafka/blob/2.8/config/kraft/README.md
  • 它处于早期访问阶段(截至 2022 年 1 月)。

标签: apache-kafka


【解决方案1】:

这是一个不需要 Zookeeper 的 Kafka Docker 映像(如上所述):

https://hub.docker.com/r/bashj79/kafka-kraft

免责声明:我是作者。

【讨论】:

  • 请链接到⬆️的来源? ??
  • 这里是 GitHub 中的源代码。随意贡献任何改进:) github.com/bashj79/kafka-kraft-docker
  • 你可以发布一个工作的 docker-compose.yaml 作为帮助让它运行。由于代理似乎没有对控制器(即代理本身)进行罚款,因此我无法启动并运行它。 日志: INFO [BrokerToControllerChannelManager broker=1 name=heartbeat]: Recorded new controller, from now on will use broker localhost:9093 (id: 1 rack: null) (kafka.server.BrokerToControllerRequestThread) WARN [BrokerToControllerChannelManager broker=1 name=heartbeat] Connection to node 1 (localhost/127.0.0.1:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
【解决方案2】:

我读到 Kafka 不再需要 zookeeper

您可能已经读到将来Apache Kafka 将不再需要 Zookeeper - 这在KIP-500中有详细说明

但是,这还没有实现,所以暂时(2021 年 1 月)您的 Docker Compose 集成中仍然需要一个 Zookeeper。

【讨论】:

  • 在 2021 年 4 月,我们可以使用 Kafka 2.8.0 和 KIP-500 预览版在 docker-compose 开发环境中开发/测试基本的 Kafka 工作流程吗?
  • 我也在寻找同样的东西。 Kafka 2.8.0 是否有使用docker-compose 的实际示例?
  • 我们现在有官方的 kafka docker 镜像吗?没有动物园管理员?
【解决方案3】:

Confluent 在其存储库 cp-all-in-one 中发布了一个没有 zookeeper 的工作 docker-compose.yaml

有一个脚本用作解决方法

#!/bin/sh

# Docker workaround: Remove check for KAFKA_ZOOKEEPER_CONNECT parameter
sed -i '/KAFKA_ZOOKEEPER_CONNECT/d' /etc/confluent/docker/configure

# Docker workaround: Ignore cub zk-ready
sed -i 's/cub zk-ready/echo ignore zk-ready/' /etc/confluent/docker/ensure

# KRaft required step: Format the storage directory with a new cluster ID
echo "kafka-storage format --ignore-formatted -t $(kafka-storage random-uuid) -c /etc/kafka/kafka.properties" >> /etc/confluent/docker/ensure

在 docker-compose-setup 的 command 中调用

  broker:
    image: confluentinc/cp-kafka:7.2.x-latest
    hostname: broker
    container_name: broker
    ports:
      - "9092:9092"
      - "9101:9101"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092'
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_JMX_PORT: 9101
      KAFKA_JMX_HOSTNAME: localhost
      KAFKA_PROCESS_ROLES: 'broker,controller'
      KAFKA_NODE_ID: 1
      KAFKA_CONTROLLER_QUORUM_VOTERS: '1@broker:29093'
      KAFKA_LISTENERS: 'PLAINTEXT://broker:29092,CONTROLLER://broker:29093,PLAINTEXT_HOST://0.0.0.0:9092'
      KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
      KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
      KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
    volumes:
      - ./update_run.sh:/tmp/update_run.sh
    command: "bash -c 'if [ ! -f /tmp/update_run.sh ]; then echo \"ERROR: Did you forget the update_run.sh file that came with this docker-compose.yml file?\" && exit 1 ; else /tmp/update_run.sh && /etc/confluent/docker/run ; fi'"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 2018-06-19
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2018-04-02
    • 2021-06-24
    相关资源
    最近更新 更多