Kafka Docker合成配置仅创建一个分区

yk9xbfzb  于 2023-01-01  发布在  Apache
关注(0)|答案(2)|浏览(122)

我使用docker-compose来设置一个Kafka代理,如下所示:

kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - 29092:29092
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      command: sh -c "(sleep 15) && (kafka-topics --create --partitions 3 --bootstrap-server kafka:9092 --topic input) && (kafka-topics --create --bootstrap-server kafka:9092 --partitions 1 --topic output)"

问题是这个命令本来应该创建一个有3个分区的“输入”主题,但却只创建了一个分区,我不明白为什么。当我后来进入容器删除这个主题并使用相同的命令再次创建它时,主题就正确地设置了。
我试过几次重建镜像并清除该高速缓存,但每次都只得到一个分区。我做错了什么?

inkz8wg9

inkz8wg91#

command不是有效的环境变量。
它需要取消缩进,但这样就覆盖了Confluent容器的默认命令,容器和Kafka代理都不会启动,也不会生成主题。
它使用一个分区创建主题,因为这是自动创建主题的默认代理配置

vom3gejh

vom3gejh2#

为什么不把init脚本从Kafka容器中分离出来,创建一个init-kafka-container来设置所有必需的主题和其他配置呢?

kafka:
    image: confluentinc/cp-kafka:latest
    hostname: kafka
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - 29092:29092
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
  init-kafka-container:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - kafka
    entrypoint: [ '/bin/sh', '-c' ]
    command: |
      "
      # rather than giving sleep 15 use this 
      # to block init container to wait for Kafka broker to be ready  
      kafka-topics --bootstrap-server kafka:9092 --list

      # create init topics
      kafka-topics --create --partitions 3 --bootstrap-server kafka:9092 --topic input
      kafka-topics --create --bootstrap-server kafka:9092 --partitions 1 --topic output
      "

相关问题