如何使用docker compose文件创建Kafka主题



我是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-1下将bash更改为sh。命令

真的需要一些帮助。下面是我的docker合成文件和我在我的终端中得到的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" 

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

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

你将需要一个次要的";init容器";创建主题,但通过AdminClient.createTopics调用(假设为Java)将此主题创建逻辑写入您自己的生产者/消费者应用程序会更容易。

否则,您可以使用具有环境变量KAFKA_CREATE_TOPICSwurstmeister/kafka图像来实现此目的,或者在容器到达后仅使用docker-compose exec kafka-1 "..."

您可以像这样更改DOCKER-COMPOSE.YAML

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
healthcheck:
test: [ "CMD-SHELL", "kafka-topics.sh --bootstrap-server kafka:9092 --list" ]
interval: 5s
timeout: 10s
retries: 5
init-kafka:
image: confluentinc/cp-kafka:6.1.1
depends_on:
- kafka
entrypoint: [ '/bin/sh', '-c' ]
command: |
"
# blocks until kafka is reachable
kafka-topics --bootstrap-server kafka:29092 --list
echo -e 'Creating kafka topics'
kafka-topics --bootstrap-server kafka-1:29092 --create --if-not-exists --topic my-topic-1 --replication-factor 1 --partitions 1
echo -e 'Successfully created the following topics:'
kafka-topics --bootstrap-server kafka-1:29092 --list
"

healthcheck运行kafka-topics.sh命令来检查Kafka是否可访问
i使用confluentinc/cp kafka:6.1.1图像,该图像具有用于创建名为"的新主题的环境变量kafka-topics;my-topic-1";

最新更新