Docker下安装Zookeeper以及Kafka

Posted thisIsDennis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker下安装Zookeeper以及Kafka相关的知识,希望对你有一定的参考价值。

一、安装Zookeeper

1. 查看Zookeeper镜像以及版本

  1. 访问Zookeeper镜像库地址
  2. 也可以通过命令docker search zookpper在命令行搜索zookeeper镜像,但是通过该命令无法查看远程镜像版本信息。

NAME:镜像名(镜像仓库源的名称)
DESCRIPTION:对该镜像的描述
STARS:类似 Github 里面的 star,表示点赞、喜欢的意思
OFFICIAL:是否 docker 官方发布
AUTOMATED:是否自动构建

2. 安装zookeeper

  1. 拉取zookeeper镜像
docker pull zookeeper:3.8.0-temurin
  1. 创建并运行zookeeper容器
docker run --name zookeeper --privileged=true -p 2181:2181 -d zookeeper:3.8.0-temurin

这里有一点需要注意,privileged命令的意思是使Docker应用容器获取宿主机root权限(特殊权限)。我使用的是官方提供的镜像,官方给出的示例中并没有使用–privileged=true命令,但是我在创建容器的过程中,没有该命令,会出现一个容器内存错误,导致容器创建失败,目前还不确定是镜像还是虚拟机的问题。

  1. 通过docker ps查看容器是否启动!
  2. 进入容器内部查看zookeeper容器状态
docker exec -it zookeeper_v bash
./bin/zkServer.sh status

3. 挂在配置文件

截止到这里,zookeeper实际上就已经装好了,借助docker可以轻松快速的装好一个zookeeper服务,但是如果此时需要部署项目就会比较麻烦,我们需要将自己的文件拷贝进入容器内部,然后进入容器内部操作,所以我们需要借助-v参数,将宿主机文件与容器文件做映射;

  1. 在本地创建文件夹用来挂在zookeeper配置信息(数据、配置、日志)
mkdir /usr/local/dockerv/zookeeper/data,conf,datalog
  1. 将刚才已经启动的zookeeper容器里的配置拷贝出来一份。看网上的某些教程,都是直接创建一个空的目录,然后创建容器进行挂载,再创建相应的配置文件,但是经我的测试,如果不提前创建好对应的配置文件,在挂载启动时,容器会出错起不来,特别是zoo.cfg配置文件,所以我的解决办法是,提前创建好一个不不需要挂载的zookeeper容器,然后将里面的配置文件直接拷贝出来,然后再创建一个挂载文件的zookeeper容器,作为实际项目中的使用。
docker cp zookeeper:/data /usr/local/dockerv/zookeeper/
docker cp zookeeper:/conf /usr/local/dockerv/zookeeper/
docker cp zookeeper:/datalog /usr/local/dockerv/zookeeper/
  1. 创建并启动zookeeper容器
docker run --name zookeeper_v --privileged=true -p 2181:2181 -d \\
-v /usr/local/dockerv/zookeeper/data:/data \\
-v /usr/local/dockerv/zookeeper/conf:/conf \\
-v /usr/local/dockerv/zookeeper/datalog:/datalog \\
zookeeper:3.8.0-temurin
  1. 重复2.4的步骤,查看容器是否启动成功,如果没问题,就可以进行kafka的安装了,因为kafka依赖于zookeeper。

二、安装Kafka

1. 查看Kafka镜像以及版本

与zookeeper镜像的查找以及下载过程基本一致,过程省略。

2. 创建网络

app-tier:网络名称
bridge:网络类型,桥接模式

docker network create app-tier --driver bridge
docker networ ls


我对这步的理解是:通过app-tier这个网络,可以实现不同容器的网络通信。

3. 创建zookeeper容器

注意:这里的zookeeper创建方式跟上面的zookeeper创建教程有所区别,首先这里需要将zookeeper加入到app-tier网络中,其次这里也不需要进行外部挂载。由于我在使用官网镜像时需要使用privileged获取宿主机的权限,这里不想再使用官方镜像了,换成bitnami的zookeeper镜像,这样也可以与kafka保持一致(kafka目前没找到官方镜像,排名第一的是bitnami的镜像)。

docker run -d --name zookeeper-server \\
--network app-tier \\
-e ALLOW_ANONYMOUS_LOGIN=yes \\
bitnami/zookeeper:3.8.0

4. 创建kafka服务

  1. 创建kafka容器
docker run --name kafka -p 9092:9092 -d \\
--network app-tier \\
-e ALLOW_PLAINTEXT_LISTENER=yes \\
-e KAFKA_BROKER_ID=0 \\
-e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \\
-e KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092 \\
bitnami/kafka:3.0

ALLOW_PLAINTEXT_LISTENER:任何人可以访问
KAFKA_BROKER_ID:在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
KAFKA_CFG_ZOOKEEPER_CONNECT:配置zookeeper管理kafka的路径
KAFKA_CFG_LISTENERS:配置kafka的监听端口

通过docker logs -f kafka查看容器启动日志,如果没什么报错信息,基本上创建就创建成功了,或者通过docker ps查看目前正在运行的容器,如果容器创建成功,此时会处于运行状态,通过ps命令是可以找得到该容器的。

  1. 验证kafka的状态
docker exec -it kafka bash
cd /opt/bitnami/kafka/bin/
.kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic mytest
.kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic mytest


通过创建topic以及查看topic命令,可以看出目前kakfa运行正常!

三、结语

记录一下自己安装创建的过程,以后有新的内容将继续补充!实际上dockerhub上就有相关镜像的安装示例,虽然简单,但是很有参考价值,以后也要养成多看官方文档的习惯!

四、参考文章

Docker 安装Zookeeper
Docker安装Kafka教程(超详细)

以上是关于Docker下安装Zookeeper以及Kafka的主要内容,如果未能解决你的问题,请参考以下文章

[docker-compose中间件集群系列] - 4 kafka的作用原理以及集群搭建

Docker 环境下,一键安装Kafaka 集群

docker笔记 kafka安装(zookeeper安装)

k8s安装kafka

在Docker环境下部署Kafka

Kafka学习篇1:Docker安装Kafka(单机默认参数版,依赖于Zookeeper)