360网站点评,自豪得用wordpress删,网站 建设开发合作协议,网站备案号的链接目录
一、安装Docker及可视化工具
二、单节点部署
1、创建挂载目录
2、运行Kafka容器
3、Compose运行Kafka容器
4、查看Kafka运行状态
三、集群部署
四、部署可视化工具
1、创建挂载目录
2、运行Kafka-ui容器
3、Compose运行Kafka-ui容器
4、查看Kafka-ui运行状态 …目录
一、安装Docker及可视化工具
二、单节点部署
1、创建挂载目录
2、运行Kafka容器
3、Compose运行Kafka容器
4、查看Kafka运行状态
三、集群部署
四、部署可视化工具
1、创建挂载目录
2、运行Kafka-ui容器
3、Compose运行Kafka-ui容器
4、查看Kafka-ui运行状态 在Kafka2.8版本之前Kafka是强依赖于Zookeeper中间件的这本身就很不合理中间件依赖另一个中间件搭建起来实在麻烦。所幸Kafka2.8之后推出了KRaft模式即抛弃Zookeeper由Kafka节点自己做Controller来选举Leader。本篇文章内容就是介绍如何在Docker中搭建Kafka KRaft环境。
一、安装Docker及可视化工具
Docker及可视化工具的安装可参考Ubuntu上安装 Docker及可视化管理工具
二、单节点部署
在进行单节点部署并以KRaft模式运行时该节点通常是混合节点的类型
1、创建挂载目录
# 创建宿主机kafka挂载目录
sudo mkdir -p /data/docker/kafka
2、运行Kafka容器
# 拉取镜像
sudo docker pull apache/kafka:3.9.0# 运行容器
sudo docker run --privilegedtrue \
--netbridge \
-d --namekafka \
-v /data/docker/kafka/data:/var/lib/kafka/data \
-v /data/docker/kafka/config:/mnt/shared/config \
-v /data/docker/kafka/secrets:/etc/kafka/secrets \
-p 9092:9092 -p 9093:9093 \
-e LANGC.UTF-8 \
-e KAFKA_NODE_ID1 \
-e CLUSTER_IDkafka-cluster \
-e KAFKA_PROCESS_ROLESbroker,controller \
-e KAFKA_INTER_BROKER_LISTENER_NAMEPLAINTEXT \
-e KAFKA_CONTROLLER_LISTENER_NAMESCONTROLLER \
-e KAFKA_LISTENERSPLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://192.168.3.9:9092 \
-e KAFKA_CONTROLLER_QUORUM_VOTERS1localhost:9093 \
apache/kafka:3.9.0
参数解析如下
参数参数说明docker run运行 Docker 容器-d容器将在后台运行而不是占用当前的终端会话--privilegedtrueDocker会赋予容器几乎与宿主机相同的权限--netbridge网络模式配置默认是bridgebridge表示使用容器内部配置网络--name kafka给容器命名为 kafka以便于管理和引用该容器-p 9092:9092 -p 9093:9093映射 kafka 的客户端通信端口和控制器端口-e KAFKA_NODE_ID1节点ID用于标识每个集群中的节点需要是不小于1的整数同一个集群中的节点ID不可重复-e CLUSTER_IDkafka-cluster集群ID可以自定义任何字符串作为集群ID同一个集群中所有节点的集群ID必须配置为一样-e KAFKA_PROCESS_ROLESbroker,controller节点类型broker,controller表示该节点是混合节点通常单机部署时需要配置为混合节点 -e KAFKA_INTER_BROKER_LISTENER_NAME PLAINTEXT Kafka的Broker地址前缀名称固定为PLAINTEXT即可 -e KAFKA_CONTROLLER_LISTENER_NAMES CONTROLLER Kafka的Controller地址前缀名称固定为CONTROLLER即可 -e KAFKA_LISTENERS PLAINTEXT://:9092,CONTROLLER://:9093 表示Kafka要监听哪些端口PLAINTEXT://:9092,CONTROLLER://:9093表示本节点作为混合节点监听本机所有可用网卡的9092和9093端口其中9092作为客户端通信端口9093作为控制器端口 -e KAFKA_ADVERTISED_LISTENERS PLAINTEXT://192.168.3.9:9092 配置Kafka的外网地址需要是PLAINTEXT://外网地址:端口的形式当客户端连接Kafka服务端时Kafka会将这个外网地址广播给客户端然后客户端再通过这个外网地址连接除此之外集群之间交换数据时也是通过这个配置项得到集群中每个节点的地址的这样集群中节点才能进行交互。需要修改为对应的Kafka的外网地址。 -e KAFKA_CONTROLLER_QUORUM_VOTERS 1localhost:9093 投票节点列表通常配置为集群中所有的Controller节点格式为节点id节点外网地址:节点Controller端口多个节点使用逗号,隔开由于是混合节点因此配置自己就行了-v /data/docker/kafka/data:/var/lib/kafka/data持久化数据文件夹如果运行出现问题可以清空该数据卷文件重启再试-v /data/docker/kafka/config:/mnt/shared/config持久化配置文件目录-v /data/docker/kafka/secrets:/etc/kafka/secrets持久化秘钥相关文件夹
容器运行参数详解参考Docker容器运行常用参数详解-CSDN博客
3、Compose运行Kafka容器
创建docker-compose.yml文件 sudo touch /data/docker/kafka/docker-compose.yml 文件内容如下 version: 3services:kafka:image: apache/kafka:3.9.0container_name: kafkaports:- 9092:9092- 9093:9093environment:- LANGC.UTF-8- KAFKA_NODE_ID1- CLUSTER_IDkafka-cluster- KAFKA_PROCESS_ROLESbroker,controller- KAFKA_INTER_BROKER_LISTENER_NAMEPLAINTEXT- KAFKA_CONTROLLER_LISTENER_NAMESCONTROLLER- KAFKA_LISTENERSPLAINTEXT://:9092,CONTROLLER://:9093- KAFKA_ADVERTISED_LISTENERSPLAINTEXT://192.168.3.9:9092- KAFKA_CONTROLLER_QUORUM_VOTERS1localhost:9093volumes:- /data/docker/kafka/data:/var/lib/kafka/data- /data/docker/kafka/config:/mnt/shared/config- /data/docker/kafka/secrets:/etc/kafka/secretsprivileged: truenetwork_mode: bridge 运行容器 #-f:调用文件,-d:开启守护进程
sudo docker compose -f /data/docker/kafka/docker-compose.yml up -d 4、查看Kafka运行状态 三、集群部署
采用Broker Controller集群这是推荐的生产环境的集群部署方式集群中不存在混合节点每个节点要么是Broker类型要么是Controller类型。
通过下列命令在服务器上部署
# 定义域名
# 这是fish shell的变量定义语法
# 使用bash请替换为kafka_host192.168.3.9
set kafka_host 192.168.3.9# 节点1-Controller
sudo docker run -id --privilegedtrue \--netbridge --namekafka-1 \-p 10001:9093 \-v /data/docker/kafka-1/config:/mnt/shared/config \-v /data/docker/kafka-1/data:/var/lib/kafka/data \-v /data/docker/kafka-1/secrets:/etc/kafka/secrets \-e LANGC.UTF-8 \-e KAFKA_INTER_BROKER_LISTENER_NAMEPLAINTEXT \-e KAFKA_CONTROLLER_LISTENER_NAMESCONTROLLER \-e CLUSTER_IDkafka-cluster \-e KAFKA_NODE_ID1 \-e KAFKA_PROCESS_ROLEScontroller \-e KAFKA_CONTROLLER_QUORUM_VOTERS1$kafka_host:10001 \-e KAFKA_LISTENERSCONTROLLER://:9093 \apache/kafka:3.9.0# 节点2-Broker
sudo docker run -id --privilegedtrue \--netbridge --namekafka-2 \-p 9002:9092 \-v /data/docker/kafka-2/config:/mnt/shared/config \-v /data/docker/kafka-2/data:/var/lib/kafka/data \-v /data/docker/kafka-2/secrets:/etc/kafka/secrets \-e LANGC.UTF-8 \-e KAFKA_INTER_BROKER_LISTENER_NAMEPLAINTEXT \-e KAFKA_CONTROLLER_LISTENER_NAMESCONTROLLER \-e CLUSTER_IDkafka-cluster \-e KAFKA_NODE_ID2 \-e KAFKA_PROCESS_ROLESbroker \-e KAFKA_CONTROLLER_QUORUM_VOTERS1$kafka_host:10001 \-e KAFKA_LISTENERSPLAINTEXT://:9092 \-e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://$kafka_host:9002 \apache/kafka:3.9.0# 节点3-Broker
sudo docker run -id --privilegedtrue \--netbridge --namekafka-3 \-p 9003:9092 \-v /data/docker/kafka-3/config:/mnt/shared/config \-v /data/docker/kafka-3/data:/var/lib/kafka/data \-v /data/docker/kafka-3/secrets:/etc/kafka/secrets \-e LANGC.UTF-8 \-e KAFKA_INTER_BROKER_LISTENER_NAMEPLAINTEXT \-e KAFKA_CONTROLLER_LISTENER_NAMESCONTROLLER \-e CLUSTER_IDkafka-cluster \-e KAFKA_NODE_ID3 \-e KAFKA_PROCESS_ROLESbroker \-e KAFKA_CONTROLLER_QUORUM_VOTERS1$kafka_host:10001 \-e KAFKA_LISTENERSPLAINTEXT://:9092 \-e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://$kafka_host:9003 \apache/kafka:3.9.0
这样我们就部署了一个由1个Controller节点和2个Broker节点构成的集群需要注意的是 Broker节点无需暴露9093端口Controller节点无需暴露9092端口Broker节点需指定KAFKA_PROCESS_ROLES为broker同样的Controller需要指定为controllerKAFKA_CONTROLLER_QUORUM_VOTERS配置只需要写集群中所有的Controller节点的地址端口列表对于KAFKA_LISTENERS配置项Broker节点需要配置为PLAINTEXT://:9092表示本节点作为Broker节点Controller节点需要配置为CONTROLLER://:9093表示本节点作为Controller节点对于KAFKA_ADVERTISED_LISTENERS配置项Controller节点不能指定该配置Broker节点需要指定为自己的外网地址和端口 四、部署可视化工具
在早期使用Kafka时通常会选择Kafka Tool或Kafka Eagle进行管理。Kafka Tool是一款桌面应用程序而Kafka Eagle则基于浏览器运行。尽管这两款工具在用户体验上表现平平但它们基本能满足日常需求。
然而自Kafka 3.3.1版本起Kafka正式弃用了Zookeeper转而采用自有的仲裁机制即kraft模式。遗憾的是上述两款工具似乎未能及时跟进这一更新仍然要求用户输入Zookeeper地址才能连接导致它们在新版本Kafka中无法正常使用。为了解决这一问题我发现了一款轻量且易于使用的替代工具——kafka-ui它能够更好地适配新版Kafka。
1、创建挂载目录
# 创建宿主机kafka-ui挂载目录
sudo mkdir -p /data/docker/kafka-ui/config# 创建挂载的配置文件
sudo touch /data/docker/kafka-ui/config/dynamic_config.yaml
2、运行Kafka-ui容器
# 拉取镜像
sudo docker pull provectuslabs/kafka-ui:v0.7.2# 运行容器
sudo docker run --privilegedtrue \
--netbridge \
-d --namekafka-ui \
-p 18080:8080 \
-v /data/docker/kafka-ui/config/dynamic_config.yaml:/etc/kafkaui/dynamic_config.yaml
-e KAFKA_CLUSTERS_0_NAMEkafka-cluster \
-e KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS192.168.3.9:9092 \
-e SERVER_SERVLET_CONTEXT_PATH/ \
-e AUTH_TYPELOGIN_FORM \
-e SPRING_SECURITY_USER_NAMEadmin \
-e SPRING_SECURITY_USER_PASSWORDadmin \
-e TZAsia/Shanghai \
-e LANGC.UTF-8 \
provectuslabs/kafka-ui:v0.7.2
参数解析如下
参数参数说明docker run运行 Docker 容器-d容器将在后台运行而不是占用当前的终端会话--privilegedtrueDocker会赋予容器几乎与宿主机相同的权限--netbridge网络模式配置默认是bridgebridge表示使用容器内部配置网络--name kafka-ui给容器命名为 kafka-ui以便于管理和引用该容器-p 18080:8080映射 kafka-ui 的web端口 -v /data/docker/kafka-ui/config/dynamic_config.yaml: /etc/kafkaui/dynamic_config.yaml 挂载配置文件确保config/dynamic_config.yaml文件存在-e SERVER_SERVLET_CONTEXT_PATH/默认kafka-ui是免登录的为了防止所有人都可以登录产生误操作问题在docker部署的时候可以添加如下四个环境变量配置用户的登录密码。-e AUTH_TYPELOGIN_FORM-e SPRING_SECURITY_USER_NAMEadmin-e SPRING_SECURITY_USER_PASSWORDadmin-e KAFKA_CLUSTERS_0_NAMEkafka-cluster自定义集群名称 -e KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS 192.168.3.9:9092 集群地址如有多个地址逗号分隔需要修改为对应的Kafka的外网地址。
3、Compose运行Kafka-ui容器
创建docker-compose.yml文件
sudo touch /data/docker/kafka-ui/docker-compose.yml
文件内容如下
version: 3services:kafka:image: provectuslabs/kafka-ui:v0.7.2container_name: kafka-uiports:- 18080:8080environment:- TZAsia/Shanghai- LANGC.UTF-8- DYNAMIC_CONFIG_ENABLEDtrue- KAFKA_CLUSTERS_0_NAMEkafka-cluster- KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS192.168.3.9:9092- SERVER_SERVLET_CONTEXT_PATH/- AUTH_TYPELOGIN_FORM- SPRING_SECURITY_USER_NAMEadmin- SPRING_SECURITY_USER_PASSWORDadminvolumes:- /data/docker/kafka-ui/config/dynamic_config.yaml:/etc/kafkaui/dynamic_config.yamlprivileged: truenetwork_mode: bridge
运行容器
#-f:调用文件,-d:开启守护进程
sudo docker compose -f /data/docker/kafka-ui/docker-compose.yml up -d
4、查看Kafka-ui运行状态
http://192.168.3.9:18080/auth
账号和密码 都是admin