kafka 学习笔记3-传统部署Kraft模式集群——筑梦之路

部署kafka

集群规划

一般模式下,元数据在 zookeeper 中,运行时动态选举 controller,由controller 进行 Kafka 集群管理。kraft 模式架构下,不再依赖 zookeeper 集群,而是用三台 controller 节点代替 zookeeper,元数据保存在 controller 中,由 controller 直接进行 Kafka 集群管理。

ip 主机名 角色 node id
192.168.100.131 kafka-1 Broker,Controller 1
192.168.100.132 kafka-2 Broker,Controller 2
192.168.100.133 kafka-3 Broker,Controller 3

1. 下载二进制包

bash 复制代码
# 3个节点上都要执行

wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz

tar -zxf kafka_2.13-3.9.0.tgz

mv kafka_2.13-3.9.0 /opt/kafka

cd !$

mkdir -p /data/kafka/

apt-get update

apt-get install openjdk-21-jdk -y

java -version

2. 修改配置文件

kafka 侦听器类型介绍

PLAINTEXT:用于不加密的普通通信。 listeners=PLAINTEXT://:9092

SSL:用于加密通信,确保数据传输的安全性。 listeners=SSL://:9093

SASL_PLAINTEXT:在不加密的基础上,添加身份验证机制。listeners=SASL_PLAINTEXT://:9094

SASL_SSL:结合加密和身份验证,确保通信的机密性和完整性。listeners=SASL_SSL://:9095

CONTROLLER:用于 Kafka 集群控制器进行内部通信,管理 Broker 状态。listeners=CONTROLLER://:9096

EXTERNAL:专为外部客户端访问设计,通常用于跨网络的通信。listeners=EXTERNAL://:9097

bash 复制代码
# kafka-1

vim /opt/kafka/config/kraft/server.properties

# 节点ID,集群内唯一
node.id=1 
# 集群地址信息
controller.quorum.voters=1@192.168.100.131:9093,2@192.168.100.132:9093,3@192.168.100.133:9093
# 侦听器名称、主机名和代理将向客户端公布的端口.(broker 对外暴露的地址)
advertised.listeners=PLAINTEXT://192.168.100.131:9092,CONTROLLER://192.168.100.131:9093
# kafka数据目录
log.dirs=/data/kafka


# kafka-2

vim config/kraft/server.properties

# 节点ID,集群内唯一
node.id=2
# 集群地址信息
controller.quorum.voters=1@192.168.100.131:9093,2@192.168.100.132:9093,3@192.168.100.133:9093
# 侦听器名称、主机名和代理将向客户端公布的端口.(broker 对外暴露的地址)
advertised.listeners=PLAINTEXT://192.168.100.132:9092,CONTROLLER://192.168.100.132:9093
# kafka数据目录
log.dirs=/data/kafka

# kafka-3

 vim config/kraft/server.properties
# 节点ID,集群内唯一
node.id=3
# 集群地址信息
controller.quorum.voters=1@192.168.100.131:9093,2@192.168.100.132:9093,3@192.168.100.133:9093
# 侦听器名称、主机名和代理将向客户端公布的端口.(broker 对外暴露的地址)
advertised.listeners=PLAINTEXT://192.168.100.133:9092,CONTROLLER://192.168.100.133:9093
# kafka数据目录
log.dirs=/data/kafka

3. 集群初始化

bash 复制代码
生成存储目录唯一ID

root@kafka-1:/opt/kafka# bin/kafka-storage.sh random-uuid
1pW25CCcSUmTTXCS8H3qsQ


格式化 kafka 存储目录(每个节点都需要执行)

root@kafka-1:/opt/kafka# bin/kafka-storage.sh format -t 1pW25CCcSUmTTXCS8H3qsQ -c /opt/kafka/con

4. 集群启动

systemd管理

bash 复制代码
# 注册到systemd管理, 此处以第一个节点为例,其他类似

cat > /etc/systemd/system/kafka.service << EOF

[Unit]
Description=Apache Kafka server (KRaft mode)
Documentation=https://kafka.apache.org/documentation/
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure

# 设置 JMX 配置(可选)
Environment=KAFKA_OPTS="-Djava.rmi.server.hostname=192.168.100.131 -Dcom.sun.management.jmxremote.port=9997 -Dcom.sun.management.jmxremote.rmi.port=9997 -Dcom.sun.management.jmxremote. -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

# 设置 Kafka 日志输出(可选)
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=kafka

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload

systemctl enable kafka --now

手动管理

bash 复制代码
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties

tail -f /opt/kafka/logs/server.log

# 检查节点状态

bin/kafka-broker-api-versions.sh --bootstrap-server 127.0.0.1:9092

bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list

kafka-ui可视化工具

https://github.com/provectus/kafka-ui/releases

1. 下载jar包部署

bash 复制代码
wget https://github.com/provectus/kafka-ui/releases/download/v0.7.2/kafka-ui-api-v0.7.2.jar

2. 编写配置文件

bash 复制代码
# 配置文件
cat > config.yml << EOF
kafka:
  clusters:
    -
      name: kafka-cluster
      bootstrapServers: http://192.168.100.131:9092,http://192.168.100.132:9092,http://192.168.100.133:9092
      metrics:
        port: 9997
        type: JMX
EOF

参考样例配置:https://github.com/provectus/kafka-ui/blob/master/documentation/compose/kafka-ui.yaml。

样例文件为环境变量导入配置,如果需要转为配置文件,可使用此工具:https://env.simplestep.ca/进行转换。

3. 启动服务

bash 复制代码
nohup java -Dspring.config.additional-location=/opt/kafka-ui/config.yml -jar /opt/kafka-ui/kafka-ui-api-v0.7.2.jar &

# 推荐使用systemd管理

cat > /etc/systemd/system/kafka-ui.service << EOF
[Unit]
Description=Kafka UI Service
After=network.target

[Service]
ExecStart=/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Dspring.config.additional-location=/opt/kafka-ui/config.yml -jar /opt/kafka-ui/kafka-ui-api-v0.7.2.jar
User=root
Group=root
WorkingDirectory=/opt/kafka-ui
Restart=always
Environment=JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64  # 根据实际环境设置 JAVA_HOME
Environment=PATH=$PATH:/usr/lib/jvm/java-21-openjdk-amd64/bin

[Install]
WantedBy=multi-user.target
EOF

systemctl enable kafka-ui --now

基本使用

bash 复制代码
# 检查节点情况

bin/kafka-broker-api-versions.sh --bootstrap-server 127.0.0.1:9092

# 创建topic

bin/kafka-topics.sh --create --topic test --partitions 3 --replication-factor 2 --bootstrap-server 127.0.0.1:9092

# 检查topic

bin/kafka-topics.sh --describe --bootstrap-server 127.0.0.1:9092

# 生产者发送消息

bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test

# 消费者消费消息

bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test

# 删除topic

bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --delete --topic test
相关推荐
知识分享小能手2 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
汇能感知4 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun4 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao5 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾5 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT6 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa6 小时前
HTML和CSS学习
前端·css·学习·html
ST.J6 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin6 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
看海天一色听风起雨落7 小时前
Python学习之装饰器
开发语言·python·学习