创建docker-compose.yaml
bash
version: "3.9" #版本号
services:
kafka:
image: apache/kafka:3.9.0
container_name: kafka
hostname: kafka
ports:
- 9092:9092 # 容器内部之间使用的监听端口
- 9094:9094 # 容器外部访问监听端口
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
# 外部访问监听端口为 9092,容器内部使用不同的端口 9094
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094,CONTROLLER://localhost:9093,PLAINTEXT_CONTAINER://kafka:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9094,PLAINTEXT_CONTAINER://kafka:9092
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_CONTAINER:PLAINTEXT
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_NUM_PARTITIONS: 3
KAFKA_LOG_DIRS: /var/lib/kafka/data
volumes:
- ./data/kafka/data:/var/lib/kafka/data
运行docker-compose.yaml
bash
docker compose -f ./docker-compose.yaml up -d
测试kafka
- 进入容器
bash
docker exec -it kafka bash
- 创建topic
bash
/opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --topic topic-test
- 打开生产者,在终端发送消息
bash
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server kafka:9092 --topic topic-test
- 另外打开一个终端,进入容器
bash
docker exec -it kafka bash
- 打开消费者,接收消息
bash
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic test-topic --from-beginning