我想在 docker-compose 启动时创建和配置 kafka 主题。我可以借助附加服务来完成此操作(请参阅 init-kafka)。
是否可以在没有额外服务的情况下创建kafka主题?我尝试在kafka服务中使用
command: kafka-topics.sh --create --bootstrap-server kafka:9092 --topic tasks_topic --partitions 3
,但没有成功
此代码对我有用:
version: "3.8"
services:
zookeeper:
image: bitnami/zookeeper:latest
ports:
- 2181:2181
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: bitnami/kafka:latest
ports:
- 9092:9092
- 9093:9093
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CLIENT://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,CLIENT://localhost:9093
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT
depends_on:
- zookeeper
init-kafka:
image: bitnami/kafka:latest
command: kafka-topics.sh --create --bootstrap-server kafka:9092 --topic tasks_topic --partitions 3
depends_on:
- kafka
有多种方法可以做到这一点。但你肯定可以通过
environment
进行创作
kafka:
image: bitnami/kafka:latest
ports:
- 9092:9092
- 9093:9093
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CLIENT://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,CLIENT://localhost:9093
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT
- KAFKA_CREATE_TOPICS: "tasks_topic1:3:1,another-topic:5:1"
depends_on:
- zookeeper
KAFKA_CREATE_TOPICS
是环境变量,容器启动时会自动创建Kafka主题。它使用格式 topic_name:partitions:replication_factor
.