最近在学习 Kafka 的知识,遇到一些问题网上搜到的信息不全。想要在本地安装一个 Kafka 进行验证,想到了之前买的 Nas 就开始折腾。
用 Docker 的方式安装 Kafka
现在的 Nas 很多都支持 Docker,我买的也支持。威联通的 Docker 叫 Container Station
,因为提供了图形化界面就不用写命令了。现在的 Kafka 似乎可以在没有 Zookeeper 的情况下运行,但我考虑到万一以后要用到 Zookeeper 再腾出时间来安装太费事了,就索性一起装了。
安装 Zookeeper
选择映像
Zookeeper 的映像我使用的是搜索出来的第一个镜像,因为看起来像是官方出品。下载完映像后开始安装过程。
发布网络端口
配置一下Zookeeper 对外暴露的网络端口,这个映像已经把用到的端口写上了,只需要配置主机上要暴露的端口就可以了。如果不填就是与容器的端口保持一致,我直接在所有的端口前面加了一个 1(2181 变成 12181)。容器端口最好不要改,如果改了的话要在 Kafka 的配置里做相同的更改。
存储映射
在高级设置中配置文件夹的映射,映像也已经把用到的几个文件夹提出来了(本来还想去网上搜一下要用的哪些文件夹)。为了方面看文件,我把这三个文件夹 绑定装载主机路径,绑定到 Nas 的文件夹里。
Zookeeper 安装完成
配置完网络和存储就直接安装完成了,Zookeeper 自己会启动。等启动完之后看日志没有报错,再登录容器执行 zkCli.sh
,能连接上就说明成功了。
安装 Kafka
选择映像
Kafka 的映像我使用的是星星最多的 bitnami/kafka
映像。下载映像后直接开始安装。
配置文件
Kafka 依赖几个配置文件,要在安装之前先准备好并放到 Nas 上的一个目录里,我在 Nas 上新建了一个 Container\kafka\config 目录,在安装 Kafka 的步骤里映射到容器里。
server.properties
server.properties
是 Kafka 的核心配置文件,没有启动会报错。文件的内容如下
broker.id=0
listeners=PLAINTEXT://{Ip}:{Port}
log.dirs=/var/lib/kafka/data
zookeeper.connect={Ip}:{Port}
- broker.id:Broker 的 id,随便写一个大于等于 0 的整数就可以了
- listeners:监听的端口,
PLAINTEXT://
是固定的,后面是 ip 和端口,默认端口是 9092,没有特殊需求可以不用改 - log.dirs:日志文件夹
- zookeeper.connect:Zookeeper 的 ip 和端口.注意这里的端口是 zk 容器的端口,不要写成主机映射的端口(在安装 zookeeper 时不管有没有绑定主机端口都没有影响,用容器端口)
log4j.properties
Kafka 的日志文件,网上直接拷贝一份就可以了。我是直接在 Github 上拉的 Kafka 项目里的 log4j.properties
文件。
tools-log4j.properties
Kafka 工具的日志文件,同样网上直接拷贝。我还是直接在 Github 上拉的 Kafka 项目里的 tools-log4j.properties
文件。
网络映射
这个映像文件已经把要用的端口提出来了,根据需要绑定主机端口,如果不填就是对外暴露 9092 端口。
存储映射
存储映射的时候配置文件的目录是一定要绑定的,因为要把刚才新建的几个配置文件映射到容器里让 Kafka 能够使用。我还映射了一个 data 文件夹,方便后面看文件学习。
Kafka 安装完成
网络映射和存储映射都配置好了之后,就可以完成安装了。等容器启动完成后看下日志,没有报错就算成功了。为了验证安装是否成功可以登录容器创建一个 Topic
kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --create --replication-factor 1 --partitions 1 --topic first-topic
注意这里的 ip 和端口一定要和配置文件里的一致,不然可能会报错。Topic 创建成功就说明 Kafka 安装成功了(其实只要 Kafka 响应了就算安装成功了)。
关于网络
安装之间看到有文章说 Docker 容器之间互相访问需要对网络做一些配置,想着先安装完试一下再说。结果安装完直接可以用,不需要对网络做处理,不知道是否威联通做了处理。反正不用处理最好。