【问题标题】:How do I create a Kafka topic using a docker-compose file?如何使用 docker-compose 文件创建 Kafka 主题?
【发布时间】:2021-11-22 11:14:18
【问题描述】:

我是 Kafka 新手,我正在尝试创建一个演示 Kafka 服务器并使用它。

我已经使用 docker-compose 文件创建了 Zookeeper 和 Kafka 容器,它们已启动并运行良好。

如果我 docker exec 进入 Kafka 容器并运行:

kafka-topics --create --zookeeper zookeeper-1 --replication-factor 1 --partitions 1 --topic demo-topic

主题已成功创建...但我想启动 Kafka 代理,然后以编程方式创建主题而无需用户交互(最终将用于管道)

我尝试了两个不同的 Kafka 图像(另一个是 confluentinc/cp-kafka)...我还尝试在 kafka 下将 bash 更改为 sh -1.command

真的可以在这里得到一些帮助。下面是我的 docker-compose 文件以及我在终端中获得的 bitnami 图像和融合图像的错误响应。

错误 (BITNAMI)
/opt/bitnami/scripts/kafka/entrypoint.sh: line 27: exec: bash -c "kafka-topics --create --zookeeper zookeeper-1 --replication-factor 1 --partitions 1 --topic demo-topic": not found

错误(融合)
Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "bash -c \"kafka-topics --create --zookeeper zookeeper-1 --replication-factor 1 --partitions 1 --topic demo-topic\"": executable file not found in $PATH: unknown

DOCKER-COMPOSE.YAML

services:
  zookeeper-1:
    container_name: zookeeper-1
    image: zookeeper
    restart: always
    ports:
      - 2181:2181
    environment:
      - ZOOKEEPER_CLIENT_PORT=2181
    volumes: 
    - ./config/zookeeper-1/zookeeper.properties:/kafka/config/zookeeper.properties
  kafka-1:
    container_name: kafka-1 
    image: bitnami/kafka
    depends_on: 
      - zookeeper-1
    ports: 
      - 29092:29092
      - 9092:9092
    environment:
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper-1:2181
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092
      - ALLOW_PLAINTEXT_LISTENER=yes
    command:
      - bash -c "kafka-topics --create --zookeeper zookeeper-1 --replication-factor 1 --partitions 1 --topic demo-topic" 

【问题讨论】:

    标签: docker apache-kafka docker-compose


    【解决方案1】:

    对于这两个错误,您提供的命令被附加到容器的入口点,这些入口点不接受 bash 命令...您需要同时覆盖入口点和命令,并提供完整路径kafka-topics 脚本,因为它不在 $PATH 上。

    但是,您不能在与代理相同的容器上使用 command 执行此操作,因为这会覆盖实际启动服务器的命令。

    您将需要一个辅助“初始化容器”来创建主题,但通过AdminClient.createTopics 调用(假设是Java)将这个主题创建逻辑写入您自己的生产者/消费者应用程序会更容易。

    否则,您可以为此使用具有环境变量 KAFKA_CREATE_TOPICSwurstmeister/kafka 映像,或者在容器启动后仅使用 docker-compose exec kafka-1 "..."

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-28
      • 2019-12-19
      • 2018-01-14
      • 2018-02-22
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多