在 Docker 中搭建 Kafka 集群可以大大简化环境配置和服务管理。以下是通过 Docker Compose 快速搭建 Kafka 集群及进行基本测试的技术指南。Kafka 集群通常包含多个节点,我们将配置一个简单的 3 节点 Kafka 集群,并介绍如何进行基本的消息生产和消费测试。
1. 环境准备
确保你已经安装了 Docker 和 Docker Compose。
- 安装 Docker:请参考 Docker 官方安装文档。
- 安装 Docker Compose:请参考 Docker Compose 安装文档。
2. 使用 Docker Compose 配置 Kafka 集群
2.1 创建项目目录
首先,创建一个项目目录用于存放 Docker 配置文件。
mkdir kafka-docker
cd kafka-docker
2.2 创建 docker-compose.yml
接下来,创建一个 docker-compose.yml
文件,用于定义 Kafka 集群中的多个容器。这个例子使用了 3 个 Kafka 节点和一个 Zookeeper 节点。
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper:3.4.6
container_name: zookeeper
ports:
- "2181:2181"
networks:
- kafka-net
kafka1:
image: wurstmeister/kafka:latest
container_name: kafka1
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENER: INSIDE_kafka1:9093
KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXT
KAFKA_LISTENER_NAME_INSIDE: INSIDE
KAFKA_LISTENER_PORT_INSIDE: 9093
KAFKA_LISTENER_NAME_OUTSIDE: OUTSIDE
KAFKA_LISTENER_PORT_OUTSIDE: 9092
KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
KAFKA_LISTENER_NAMES: INSIDE,OUTSIDE
KAFKA_LISTENER_INTERFACE: INSIDE
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENER_PORT_MAP: INSIDE:9093,OUTSIDE:9092
KAFKA_LISTENER_NAME_INSIDE: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXT
ports:
- "9093:9093"
- "9092:9092"
networks:
- kafka-net
kafka2:
image: wurstmeister/kafka:latest
container_name: kafka2
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENER: INSIDE_kafka2:9093
KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXT
KAFKA_LISTENER_NAME_INSIDE: INSIDE
KAFKA_LISTENER_PORT_INSIDE: 9093
KAFKA_LISTENER_NAME_OUTSIDE: OUTSIDE
KAFKA_LISTENER_PORT_OUTSIDE: 9092
KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
KAFKA_LISTENER_NAMES: INSIDE,OUTSIDE
KAFKA_LISTENER_INTERFACE: INSIDE
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENER_PORT_MAP: INSIDE:9093,OUTSIDE:9092
KAFKA_LISTENER_NAME_INSIDE: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXT
ports:
- "9094:9093"
networks:
- kafka-net
kafka3:
image: wurstmeister/kafka:latest
container_name: kafka3
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENER: INSIDE_kafka3:9093
KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXT
KAFKA_LISTENER_NAME_INSIDE: INSIDE
KAFKA_LISTENER_PORT_INSIDE: 9093
KAFKA_LISTENER_NAME_OUTSIDE: OUTSIDE
KAFKA_LISTENER_PORT_OUTSIDE: 9092
KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
KAFKA_LISTENER_NAMES: INSIDE,OUTSIDE
KAFKA_LISTENER_INTERFACE: INSIDE
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENER_PORT_MAP: INSIDE:9093,OUTSIDE:9092
KAFKA_LISTENER_NAME_INSIDE: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXT
ports:
- "9095:9093"
networks:
- kafka-net
networks:
kafka-net:
driver: bridge
2.3 启动 Kafka 集群
使用以下命令启动 Kafka 集群:
docker-compose up -d
这将启动 Zookeeper 服务以及 3 个 Kafka 节点。
2.4 验证 Kafka 集群
通过以下命令查看 Kafka 集群中运行的容器:
docker ps
你应该能够看到 zookeeper
, kafka1
, kafka2
, kafka3
容器正在运行。
3. 测试 Kafka 集群
3.1 创建 Kafka Topic
使用 Kafka 提供的 kafka-topics.sh
工具创建一个 Topic。
docker exec -it kafka1 kafka-topics.sh --create --topic test-topic --bootstrap-server kafka1:9092 --partitions 3 --replication-factor 3
--topic test-topic
:指定 topic 名称。--bootstrap-server kafka1:9092
:指定 Kafka 集群的地址。--partitions 3
:指定分区数量。--replication-factor 3
:指定副本数量。
3.2 生产消息
使用 Kafka 的 kafka-console-producer.sh
工具向 test-topic
发送消息。
docker exec -it kafka1 kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9092,kafka3:9092 --topic test-topic
输入消息并按 Enter
键发送:
Hello Kafka
This is a test message
3.3 消费消息
使用 kafka-console-consumer.sh
工具从 test-topic
中消费消息:
docker exec -it kafka1 kafka-console-consumer.sh --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 --topic test-topic --from-beginning
此命令将显示所有从 test-topic
中接收到的消息。
4. 集群管理和扩展
4.1 查看集群状态
使用 kafka-topics.sh
工具查看集群中的所有 topic。
docker exec -it kafka1 kafka-topics.sh --list --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092
4.2 增加 Partition
你可以为已存在的 topic 增加 partition。
docker exec -it kafka1 kafka-topics.sh --alter --topic test-topic --partitions 5 --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092
4.3 删除 Topic
你可以删除一个 topic。
docker exec -it kafka1 kafka-topics.sh --delete --topic test-topic --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092
5. 停止和删除容器
完成测试后,你可以使用以下命令停止和删除容器。
docker-compose down
这将停止所有容器并删除网络配置。
总结
通过 Docker Compose 快速搭建 Kafka 集群,不仅简化了配置和管理过程,还为开发和测试提供了灵活的环境。通过这篇指南,你可以快速配置 Kafka 集群,创建 topic,发送和消费消息,以及进行集群管理和扩展。
发表回复