在本地安装 Kafka 的时候如果手动进行安装,难免过程繁杂且浪费时间。不仅需要先手动安装 Zookeeper,然后再进行 Kafka 的安装。即使从 Kafka 2.8.0 版本开始已经不需要再安装 Zookeeper 就能运行 Kafka 了,但使用 Docker 无疑是更快的一种方式。
前提:本文使用 centos7 虚拟机,且虚拟机已安装好 Docker 和 Docker Compose。
配置阿里云 Docker 镜像
Docker 拉取一般需要配置国内的镜像,不然默认国外的仓库拉取速度会很慢。我们使用阿里云的镜像加速器,直接登录阿里云的容器镜像服务控制台(每个人登录后都有自己的地址):
直接将镜像加速器配置到 /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
使用 Docker 进行安装
- 首先需要从 Docker 仓库拉取需要的镜像,这里我们使用的版本仍然是需要 Zookeeper 的。
docker pull zookeeper:3.8
docker pull wurstmeister/kafka:2.13-2.8.1
- 创建 Zookeeper 容器
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime zookeeper:3.8
- 创建 Kafka 容器,注意:其中的 ip 地址需要改成自己虚拟机的 ip 地址。
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.1.110:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.110:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka:2.13-2.8.1
其中:KAFKA_ZOOKEEPER_CONNECT
指定 Zookeeper 的连接地址,KAFKA_LISTENERS
即 Kafka 的服务器监听地址和端口,这里表示监听所有的地址和端口。如果我们配置了 127.0.0.1:9092,那我们就能在这台虚拟机上使用命令行连接 kafka 服务器。
但是外部地址无法连接 kafka 的生产者消费者进行使用,要想外部机器能连接 Kafka 进行发信收信,还需配置KAFKA_ADVERTISED_LISTENERS
来表示外部机器可以使用这个地址来进行连接。
- 以上就完成了 Kafka 的安装,可以使用
docker logs + 容器名称
来查看容器的日志看是否运行成功。
使用 Docker Compose 进行安装
- 如果不想执行创建两次容器命令,可以直接使用 Docker Compose 来执行,在一个目录下创建好一个文件,固定名称为
docker-compose.yml
,内容如下(一样记得更改对应的 ip 地址):
version: '3'
name: kafka-group
services:
zookeeper-test:
image: zookeeper:3.8
ports:
- "2181:2181"
container_name: zookeeper-test
kafka-test:
image: wurstmeister/kafka:2.13-2.8.1
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: "0"
KAFKA_ZOOKEEPER_CONNECT: "192.168.1.110:2181/myKafka"
KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://192.168.1.110:9092"
KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:9092"
depends_on:
- zookeeper-test
container_name: kafka-test
- 在该目录下执行命令
docker compose up -d
, 即安装启动了 Kafka。
额外说明
- 一些常用命令如下:
# 启动服务
docker compose up -d
# 如果文件名称不是默认的 docker-compose.yml,可以用 -f 指定对应的文件名称,下列命令一样,不赘述。
docker compose -f my_docker_file.yml up -d
# 停止服务并删除容器
docker compose down
# 查看服务日志(实时)
docker compose logs -f
# 停止已运行的服务
docker compose stop
# 启动服务
docker compose start
# 重新启动容器
docker-compose restart
-
如果需要挂载对应的配置文件和数据可以使用
docker volume create + 数据卷名称
,默认创建的位置在/var/lib/docker/volumes
下。 -
为了避免 Kafka 的元数据在 Zookeeper 中太过分散,可以看到在上述 docker compose 的文件中的配置为:
KAFKA_ZOOKEEPER_CONNECT: "192.168.1.110:2181/myKafka"
,这样的配置会把 Kafka 的元数据都放在 Zookeeper 的 myKafka 节点之下。可使用以下命令查看:- a. 进入 Zookeeper 容器:
docker exec -it zookeeper-test /bin/bash
- b. 进入对应的 Zookeeper 目录:
cd /apache-zookeeper-3.8.4-bin/bin
- c. 执行命令进入 Zookeeper 服务:
./zkCli.sh
,查看节点:
- a. 进入 Zookeeper 容器:
测试 Kafka 进行消息发信收信
- 生产者,往主题 topic-test 发送消息:
# 进入容器
docker exec -it kafka-test /bin/bash
cd /opt/kafka/bin
# 启动 Producer
sh kafka-console-producer.sh --broker-list localhost:9092 --topic topic-test
- 另外开一个窗口充当消费者
# 进入容器
docker exec -it kafka-test /bin/bash
cd /opt/kafka/bin
# 启动 Consumer
sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-test
- 生产者发送消息,消费者接受
使用 Kafka Tool 可视化工具连接 Kafka
-
官网 www.kafkatool.com/download.ht… 下载对应工具(改名 Offset Explorer 了)。我下载的是 2.3.5 版本。
-
安装后打开,创建新连接,填好 Kafka 所在虚拟机 ip 地址:
-
点击连接,打开 topic 主题选项,设置这个主题(topic-test)key 和 value 的显示序列化为 String(不然看到的是二进制字节数组):
-
可以看到之前测试发送的消息:
Kafak 配置和使用
- 详细使用和配置参考: kafka.apache.org/documentati…