我使用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个分区的“输入”主题,但却只创建了一个分区,我不明白为什么。当我后来进入容器删除这个主题并使用相同的命令再次创建它时,主题就正确地设置了。
我试过几次重建镜像并清除该高速缓存,但每次都只得到一个分区。我做错了什么?
2条答案
按热度按时间inkz8wg91#
command
不是有效的环境变量。它需要取消缩进,但这样就覆盖了Confluent容器的默认命令,容器和Kafka代理都不会启动,也不会生成主题。
它使用一个分区创建主题,因为这是自动创建主题的默认代理配置
vom3gejh2#
为什么不把init脚本从Kafka容器中分离出来,创建一个init-kafka-container来设置所有必需的主题和其他配置呢?