单节点部署Zookeeper和Kafka
参考文章:https://blog.csdn.net/qyj19920704/article/details/148240392
1、创建docker-compose.yml文件
使用的是 Confluent Platform 的 Kafka 镜像
bash
version: "3"
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.4.0
platform: linux/amd64 # 明确指定平台
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
# 生产环境建议增加以下配置
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_SERVERS: "zookeeper:2888:3888"
kafka:
image: confluentinc/cp-kafka:7.4.0
platform: linux/amd64
hostname: kafka
container_name: kafka
depends_on:
- zookeeper
ports:
- "9092:9092"
- "29092:29092" # 用于容器间通信
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://kafka:29092
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNAL
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
# 内存配置(根据实际情况调整)
KAFKA_HEAP_OPTS: "-Xmx1G -Xms1G"
2、启动服务
bash
docker-compose up -d

3、进入容器
bash
docker-compose exec kafka bash

4、新建topic
bash
kafka-topics --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

也可不进入容器新建topic
查看topic情况
bash
docker-compose exec kafka kafka-topics --describe --topic test-topic --bootstrap-server localhost:9092

5、新建生产者
bash
kafka-console-producer --topic test-topic --bootstrap-server localhost:9092

也可容器外新建生产者
bash
docker-compose exec kafka kafka-console-producer --topic test-topic --bootstrap-server localhost:9092

6、新建消费者
bash
# 方法 1:从最早的消息开始消费(等待新消息)
docker-compose exec kafka kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092 --from-beginning
# 方法 2:实时消费新消息(先启动消费者,再发送消息)
docker-compose exec kafka kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092
# 方法 3:显示 key 和 value
docker-compose exec kafka kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092 --from-beginning --property print.key=true --property print.value=true
# 方法 4:显示时间戳
docker-compose exec kafka kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092 --from-beginning --property print.timestamp=true
