Docker 搭建 Kafka 单机开发环境
前言
本文主要介绍如何在本地使用 Docker 搭建 Kafka 的单机开发环境,其中包括 ZooKeeper,Kafka,Kafka-UI 的安装。
提示
- Kafka 的 Broker 组件是使用 Scala 开发的,而 Producer 组件和 Consumer 组件是使用 Java 开发的。
- Kafka 第三方的开源可视化管理工具有很多种,主流的有 Kafka-UI、Kafka Manager(CMAK)、Kafka Eagle(EFAK),详细的对比介绍请看 这里。
版本说明
软件 | 版本 | 说明 |
---|---|---|
Zookeeper | 3.7 | |
Kafka | 3.6.0 | |
Kafka-UI | latest |
Docker 安装
在本节中,将介绍 CentOS 7 如何安装 Docker。若使用的 Linux 系统是其他发行版,建议网上搜索对应的安装教程,这里不再累述。
1 | # 卸载旧版本的 Docker |
创建数据目录
在宿主机内创建 Zookeeper 的数据目录,用于持久化 Zookeeper 容器内的数据。
1 | # 创建目录 |
在宿主机内创建 Kafka 的数据目录,用于持久化 Kafka 容器内的数据。
1 | # 创建目录 |
创建配置文件
在宿主机的任意目录下创建 docker-compose.yml
配置文件,用于 Docker Compose 管理容器,可以根据实际需求适当更改 Zookeeper、Kafka 镜像的版本号。值得一提的是,这里使用 Vmware 旗下的 Bitnami 平台维护的 Zookeeper、Kafka 镜像,而 Kafka-UI 则使用 Provectuslabs 维护的镜像,这样比较稳定可靠。
特别注意
在下述的 KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://192.168.1.130:9092
配置中,192.168.1.130
是宿主机的 IP 地址,请自行更改为您宿主机的 IP。如果配置错误,会导致外部 Kafka 客户端无法正常连接 Docker 容器内的 Kafka 服务器。
1 | version: '3.9' |
提示
- 在上述配置中,可以直接使用在 Docker-Compose 配置文件中定义的服务名称来替代容器的 IP 地址。
- 从 Kafka
2.8.0
版本开始,Kafka 自身实现了Raft
分布式一致性机制,这意味着 Kafka 集群是可以选择脱离 ZooKeeper 独立运行的。
启动 Docker 容器
1 | # 创建并启动容器 |
测试 Docker 容器
若可以使用以下地址访问对应的应用,则说明对应的 Docker 容器正常运行。值得一提的是,192.168.1.130
是宿主机的 IP 地址,请自行更改为您宿主机的 IP。
应用 | 访问地址 | 说明 |
---|---|---|
Zookeeper | 192.168.1.130:2181 | |
Kafka | 192.168.1.130:9092 | |
Kafka-UI | http://192.168.1.130:9095 | 浏览器可以直接访问 |
Kafka 基础操作
内部操作
值得一提的是,以下操作虽然是在宿主机上执行,但其本质是在 Docker 容器内部执行。
创建 Topic
1 | docker exec kafka kafka-topics.sh --create --topic first-topic --partitions 1 --replication-factor 1 --bootstrap-server kafka:9092 |
启动消费者(接收消息)
1 | docker exec kafka kafka-console-consumer.sh --topic first-topic --from-beginning --bootstrap-server kafka:9092 |
启动生产者(发送消息)
1 | docker exec -it kafka kafka-console-producer.sh --topic first-topic --broker-list kafka:9092 |
提示
启动生产者后,等待终端出现 >
符号,然后输入消息内容,并按下 回车键
,这样就可以将消息发送给消费者了。
外部操作
值得一提的是,以下操作是在 Docker 容器外部执行,可以是在宿主机或者其他机器上执行。** 特别注意,其中的 192.168.1.130
是宿主机的 IP 地址,请自行更改为您宿主机的 IP。**
创建 Topic
1 | ./kafka-topics.sh --create --topic first-topic --partitions 1 --replication-factor 1 --bootstrap-server 192.168.1.130:9092 |
启动消费者(接收消息)
1 | ./kafka-console-consumer.sh --topic first-topic --from-beginning --bootstrap-server 192.168.1.130:9092 |
启动生产者(发送消息)
1 | ./kafka-console-producer.sh --topic first-topic --broker-list 192.168.1.130:9092 |
提示
启动生产者后,等待终端出现 >
符号,然后输入消息内容,并按下 回车键
,这样就可以将消息发送给消费者了。