Docker Compose
一、认识
通过 Docker Compose
部署 Kafka
(包括 Zookeeper
)
二、准备
安装 Docker
和 Docker Compose
:确保本地已安装好 Docker
环境和 Docker Compose
工具。 Kafka
依赖 Zookeeper
来管理集群,所以通常需要同时启动 Zookeeper
和 Kafka
两个服务。
三、配置
在项目目录下创建一个 docker-compose.yml
文件,内容如下:
version: "3"
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
container_name: zookeeper
restart: always
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_SYNC_LIMIT: 2
ports:
- "2181:2181"
kafka:
image: confluentinc/cp-kafka:latest
container_name: kafka
restart: always
depends_on:
- zookeeper
ports:
- "9092:9092" # Kafka 内部通信端口(集群内部使用)
- "29092:29092" # Kafka 外部访问端口(宿主机访问)
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:29092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
Kafka
服务
-
ports
:9092:9092
让容器内部服务可以访问Kafka
;29092:29092
让宿主机可以访问Kafka
。 -
使用
confluentinc/cp-kafka
镜像,并设置依赖关系,确保在Zookeeper
启动后再启动Kafka
。 -
KAFKA_LISTENERS
: 定义了Kafka
监听的地址,PLAINTEXT://0.0.0.0:9092
允许Kafka
在容器内部通过kafka:9092
访问。PLAINTEXT_HOST://0.0.0.0:29092
让宿主机通过localhost:29092
访问。 -
KAFKA_ZOOKEEPER_CONNECT
指定Kafka
连接Zookeeper
的地址。 -
KAFKA_ADVERTISED_LISTENERS
配置了Kafka
向客户端暴露的地址,这里配置了内部和外部(localhost
)的访问方式。PLAINTEXT://kafka:9092
供Docker
内部容器访问。PLAINTEXT_HOST://localhost:29092
供宿主机访问。 -
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
设置为1
,适合单节点测试环境。
Zookeeper
服务
- 使用
confluentinc/cp-zookeeper
镜像,监听本地的2181
端口。
四、启动
在 docker-compose.yml
文件所在目录下,执行以下命令启动服务:
docker-compose up -d
此命令会以后台模式启动 Zookeeper
和 Kafka
容器。
五、验证
执行 docker ps
查看 Kafka
和 Zookeeper
是否正常运行。
六、内部访问 Kafka 服务
一、进入 Kafka
容器: 通过 docker exec -it kafka bash
进入 Docker
容器
docker exec -it kafka bash
二、测试 Kafka
服务
// 1. 创建主题 test-topic 主题
kafka-topics --create --topic test-topic --bootstrap-server localhost:29092 --partitions 3 --replication-factor 1
// 2. 生产者发送消息,并输入 Hello Kafka ,按 control + c 退出
kafka-console-producer --topic test-topic --bootstrap-server localhost:29092
// 3. 消费者消费消息
kafka-console-consumer --topic test-topic --from-beginning --bootstrap-server localhost:29092
七、外部访问 Kafka 服务
一、宿主机安装 Kafka
: Kafka
可以通过 Homebrew
直接安装
brew update
brew install kafka
二、添加 Kafka
变量: 在 Mac
上使用 brew install kafka
安装 Kafka
后,默认情况下,Kafka
的命令行工具(如 kafka-topics
, kafka-console-producer
等)不会自动添加到环境变量 PATH
中。
// 1. 查看 kafka 安装路径
brew info kafka
// 2. 将 Kafka 的 bin 目录加入 PATH 环境变量
echo 'export PATH="/opt/homebrew/Cellar/kafka/3.9.0/bin/$PATH"' >> ~/.zshrc
source ~/.zshrc
// 3. 测试 Kafka 命令是否成功
kafka-topics --version
三、测试 Kafka
服务
// 1. 创建主题 test-topic 主题
kafka-topics --create --topic test-topic --bootstrap-server localhost:29092 --partitions 3 --replication-factor 1
// 2. 生产者发送消息,并输入 Hello Kafka ,按 control + c 退出
kafka-console-producer --topic test-topic --bootstrap-server localhost:29092
// 3. 消费者消费消息
kafka-console-consumer --topic test-topic --from-beginning --bootstrap-server localhost:29092