Docker部署单节点使用KRaft存储数据的Kafka与可视化界面Kafka-Map

发布于:2025-08-30 ⋅ 阅读:(13) ⋅ 点赞:(0)

记录一下Docker部署单节点Kafka与部署可视化界面KafkaMap容器

目录

一、Kafka早已经弃用了ZooKeeper

二、Docker部署单机版Kafka

1、--name kafka-server

2、--network kafka-stand

3、--restart unless-stopped

4、-p 9092:9092

5、-p 9093:9093

6、-e ALLOW_PLAINTEXT_LISTENER=yes

7、-e KAFKA_CFG_PROCESS_ROLES=broker,controller

8、-e KAFKA_CFG_NODE_ID=1

9、-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT

10、  -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER

11、  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093

12、-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.10.10.10:9092

13、-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka-server:9093

14、-e KAFKA_CLUSTER_ID=$(uuidgen)

15、  -e KAFKA_HEAP_OPTS="-Xms512m -Xmx512m"

16、  -v /home/username/kafka-data:/bitnami/kafka/data

17、  bitnami/kafka:3.8.0

三、Docker部署单机版kafak-map可视化UI

四、完结,撒花  任何问题私信或评论,我随时修改博文。


一、Kafka早已经弃用了ZooKeeper

这个是Kafka的官网:Apache Kafka     

Kafka 是从 2.8 版本开始引入 KRaft 作为实验性特性的。在 3.3 版本时 KRaft 可用于生产环境。到 3.5 版本 Zookeeper 模式被标记为弃用。Kafka 4.0 版本则彻底移除 Zookeeper。

KRaft是有Raft协议演变而来,它的性能和稳定性比ZooKeeper更高,降低了维护成本。并且,ZooKeeper的运行需要JAVA环境的支持,主要是JDK。

当前,还有大量的博文,记录使用ZooKeeper作为Kafka的数据存储,这非常离谱,Kafka3.3版本发布于2022年9月,即:2022年9月Kafka已经第一次可以在生成环境移除ZooKeeper。就像JAVA一样,当前已经来到了JAVA22,你还在说新项目要使用JAVA8,这简直是。。。  无言以对

二、Docker部署单机版Kafka

直接粘贴Docker命令:

注意:复制命令以后,你要修改一下 -v 目录挂载的本地位置,即:/home/username/kafka-data         username改为自己的用户名。容器名字可以不用改,这个测试环境可以随意。

这里我使用的是  bitnami公司提供的镜像。不同来源的镜像,在参数设定上可能略有差异,这些参数设定的名称都是各个镜像打包人自己定义的,会被设定进容器的配置文件中去。比如说下面的 第13 配置项(环境变量):

docker run -d --name kafka-server \
  --network kafka-stand \
  --restart unless-stopped \
  -p 9092:9092 \
  -p 9093:9093 \
  -e ALLOW_PLAINTEXT_LISTENER=yes \
  -e KAFKA_CFG_PROCESS_ROLES=broker,controller \
  -e KAFKA_CFG_NODE_ID=1 \
  -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT \
  -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
  -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.213.22.207:9092 \
  -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka-server:9093 \
  -e KAFKA_CLUSTER_ID=$(uuidgen) \
  -e KAFKA_HEAP_OPTS="-Xms512m -Xmx512m" \
  -v /home/username/kafka-data:/bitnami/kafka/data \
  bitnami/kafka:3.8.0

完全复制命令即可。Docker这种将命令分为多行,每一行的结尾都有  \  ,并且它前面还有一个空格,它的后面不能有空格,否则执行命令报错!!

下面逐行解释命令:

-p表示端口映射,-e表示设置Kafka环境变量。

1、--name kafka-server

表示容器的名称是  kafak-server,可以按照具体情况做更改

2、--network kafka-stand

表示该Kafka容器处于名字叫做  kafka-stand网络下。Docker 中的 “网络” 是一种虚拟网络环境,用于实现容器之间、容器与主机之间的网络通信隔离与管理。处于同一网络的容器可以通过容器名(或别名)直接通信,无需依赖主机的 IP 地址。例如,若容器名 A 和容器名 B 都加入了my-network网络,则 A 可以直接通过 ping B 或访问 B:端口 与 B 通信,无需手动配置端口映射或 IP 地址。不同网络中的容器默认无法通信,实现了网络层面的隔离。默认网络模式是:容器连接到 Docker 默认的桥接网络。

3、--restart unless-stopped

表示容器意外停止后,自动重启,不包含使用docker stop命令手动停止容器。比较常用的一个配置。

还有以下其它三种重启策略(即使容器已经运行起来了,我们也可以停止容器-》更新停止后的重启方式进行修改这一策略):

假如你的Linux关机,然后重启以后,你使用docker ps查看运行起来的容器,如果有一些容器没有自动跑起来,需要手动使用 docker run <容器名称> 来启动容器,它很有可能就是没有配置  --restart unless-stopped 这一个配置项。

4、-p 9092:9092

表示将Linux主机的9092端口与kafka-server容器的9092端口做映射。前者表示宿主机端口,后者表示容器接口。(容器其实就是一个阉割版的Linux)    9092端口是Kafka开放给消息的默认端口。在项目中的消费者和生产者,都需要配置   kafka的IP+9092端口。

如下图所示:(红色部分表示宿主机IP地址,因为已经做了端口映射,9092其实指的是宿主机映射容器9092的对应端口)

5、-p 9093:9093

同上。9093端口通常用于内部 broker 间通信(或安全连接)

6、-e ALLOW_PLAINTEXT_LISTENER=yes

指允许监听器明文传输。我们这里是测试搭建单机版Kafka,非生产环境,并且使用的是轻量级Bitnami公司提供的镜像,因此使用明文。生产环境,为了保证消息不被窃听,会使用SSL作为加密认证方式。   kafka镜像的来源主要有三个公司,适用于不同的场景需求,详细可以阅读下面的博客:

docker镜像wurstmeister/kafka、confluentinc/cp-kafka 和 bitnami/kafka_bitnami wurstmeister kafka-CSDN博客

7、-e KAFKA_CFG_PROCESS_ROLES=broker,controller

这一配置主要与 Kafka 2.8.0 及以上版本引入的KRaft 模式(无 ZooKeeper 模式)相关。

8、-e KAFKA_CFG_NODE_ID=1

主要用于 KRaft 模式(无 ZooKeeper 模式) 中标识当前节点的唯一 ID。这个 ID 在整个 Kafka 集群中必须唯一,用于标识节点身份。此ID必须设置,一经设置不建议更改。核心作用可以概括如下:

9、-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT

上面这个是KRaft模式中必须的配置。用于定义监听器(listener)与安全协议的映射关系。

首先是Kafka中监听器的概念:

此配置的核心作用如下:

这个配置与下面的   10  是必须对应的,因为下面的  10号配置,定义了监听器的名称。

10、  -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER

用于指定Kafka控制器使用的监听器名称。这个名称需要在上面的 配置9 中使用到。

11、  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093

定义Kafka服务监听的网络端口,协议,及对应的监听器名称。

配置值的格式是:<监听器名称>://<绑定地址>:<端口>

有多个配置值的,使用英文逗号分隔。上面的两个配置值省略了绑定地址,9092端口那个说明:“绑定当前容器的所有网络接口”(即允许来自容器外部的连接)。项目的消费者和生产者都需要使用9092端口作为消息的发送和拉取。

9093端口的配置:绑定容器所有网络接口,监听 9093 端口(专门用于内部控制器通信的端口,与客户端端口分开)。

做一个总结

9092端口其实应该设置IP地址的,在生产环境中,不能让任意的项目都可以向该Kafka发消息及拉取消息。

12、-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.10.10.10:9092

这个是必须配置的,否则客户端无法生产消息到Kafka,消费者无法拉取到消息。

用于告知客户端(消息的消费者和生产者)如何正确的连接到Kafka服务,解决容器内外网络地址不一致的问题。

直译为中文:Kafka配置的广告监听器。

后面的配置值格式是:   <客户端监听器名称>://<Kafka容器实际可访问的IP地址,通常是宿主机IP>:<客户端监听器监听的端口>

这里使用到了客户端监听器的名称,与  上面的  配置9,配置10,配置11  是对应的,都使用到了监听器的名称和各自对应的端口。

13、-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka-server:9093

用于指定集群在KRaft模式下的 控制器仲裁投票者列表。

是Kafka集群在KRaft模式下的必须配置,否则集群无法启动。ZooKeeper模式下绝对不能有此配置

具体解释该配置值的格式与意义:

这里的  kafka-server就是我们在  配置项1  配置的容器名。

下面解释一下控制器仲裁组以及控制器的作用

14、-e KAFKA_CLUSTER_ID=$(uuidgen)

设定Kafka集群的唯一ID。 $(uuidgen)表示使用UUID产生一个全球唯一ID。

在KRaft模式下必须配置,同一个集群下的多个节点,该配置的集群ID必须保持一致。

作用如下:

15、  -e KAFKA_HEAP_OPTS="-Xms512m -Xmx512m"

Kafka是由JAVA开发的程序,依赖于JAVA环境。

上面的配置中包含两个参数,分别表示:堆内存的初始大小和最大大小,都是512兆字节。

下面是AI给出的Kafka对JAVA堆内存大小的配置经验:

16、  -v /home/username/kafka-data:/bitnami/kafka/data

这个是进行宿主机文件夹和容器文件夹进行映射的命令。

强烈建议:所有的容器都要直接进行文件夹映射,尽量不使用数据卷挂载。

前者是宿主机目录路径,后者是容器内部路径。

(1)、要保证前者的宿主机目录存在,并且容器有写入读取权限。

(2)、后者的容器数据存储目录,在不同的镜像下可能不同。这需要具体查一下。

17、  bitnami/kafka:3.8.0

这个就是容器的来源,名字和版本

三、Docker部署单机版kafak-map可视化UI

开源地址:kafka-map: 一个美观简洁且强大的kafka web管理工具。

也是JAVA开发的程序。

这是一个两年前国人开发的一个开源项目。可以可视化查看Kafka集群的主题,分区等。

下面是官方提供的Docker容器安装方式:

然后直接访问  http://宿主机IP地址:8080   即可。

注意输入  admin用户名和 密码admin,这个是在docker  命令里面配置好的。

登录成功以后,需要配置一下可视化界面显示的Kafka地址,官方给出了如下步骤(因为这是一个单独的容器,没有加入到Kafka网络,不可能说启动容器以后,自动就监控所在网络中的Kafka集群):

个可视化界面有个缺点:它上面的数字是可以点击的,根本就不像是一个功能按钮!!

如下所示,图中划红线的数字,是可以点击进去查看具体的主题名字的:

四、完结,撒花  任何问题私信或评论,我随时修改博文。


网站公告

今日签到

点亮在社区的每一天
去签到