Kafka环境完整部署文档(KRaft模式+UI监控+librdkafka编译)
一、Kafka服务部署(KRaft无ZooKeeper模式)
1. 资源下载与存放
官方归档下载地址:https://archive.apache.org/dist/kafka/3.7.0/kafka_2.13-3.7.0.tgz
将安装包放置服务器 /opt 目录下,执行以下部署命令:
|
bash # 进入opt目录 cd /opt
# 确认安装包存在 ls -lh kafka_2.13-3.7.0.tgz
# 解压安装包 tar -xzf kafka_2.13-3.7.0.tgz
# 进入Kafka根目录 cd kafka_2.13-3.7.0
|

2. KRaft模式初始化部署
步骤1:生成集群唯一ID
|
bash bin/kafka-storage.sh random-uuid
|
示例输出(自行保存生成的UUID,后续部署使用):9o1eKDn4RnaVMHqgwNBPoA
步骤2:格式化存储目录
替换为自己生成的UUID执行格式化:
|
bash bin/kafka-storage.sh format -t 9o1eKDn4RnaVMHqgwNBPoA -c config/kraft/server.properties
|

步骤3:启动Kafka服务
|
bash # 前台启动(可查看实时日志,Ctrl+C停止) bin/kafka-server-start.sh config/kraft/server.properties
# 后台守护进程启动(生产推荐) bin/kafka-server-start.sh -daemon config/kraft/server.properties
|
3. 远程访问配置
修改配置文件 /opt/kafka/config/kraft/server.properties,开启外网远程连接:
|
Plain Text advertised.listeners=PLAINTEXT://192.168.*.***:9092
|
4. 服务验证测试
|
bash # 进入Kafka目录 cd /opt/kafka_2.13-3.7.0
# 创建测试主题 bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
# 查看所有主题 bin/kafka-topics.sh --list --bootstrap-server localhost:9092
# 单次发送测试消息 echo "hello kafka" | bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
# 交互式批量发送消息(每行一条,Ctrl+C退出) bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
# 消费全部历史测试消息 bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
|

5. 常用运维命令
|
bash # 停止Kafka服务 bin/kafka-server-stop.sh
# 查看Kafka进程 ps aux | grep kafka
# 实时查看运行日志 tail -f logs/server.log
# 清空KRaft日志(重置环境) rm -rf /tmp/kraft-combined-logs
|
二、Java17环境部署(适配Kafbat UI)
版本适配说明:安装web管理程序:kafbat-ui-v1.0.0.jar (自己下载);安装Java17
1. 手动安装OpenJDK17
|
bash # 进入opt目录 cd /opt
# 下载JDK17安装包 wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.14%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz
# 解压到系统Java目录 sudo tar -xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz -C /usr/lib/jvm/
# 单独配置Java17环境(不覆盖系统默认Java) JAVA17="/usr/lib/jvm/jdk-17.0.14+7/bin/java"
|
三、Kafbat UI可视化监控部署
1. 前台启动(测试调试用)
|
bash cd /opt/kafka_2.13-3.7.0 /usr/lib/jvm/jdk-17.0.14+7/bin/java -jar kafbat-ui-v1.0.0.jar \ --server.address=0.0.0.0 \ --server.port=8080 \ --kafka.clusters.default.bootstrapServers=localhost:9092
|
2. 后台启动(生产推荐)
8080端口占用时,可替换为8081等空闲端口
|
bash # 默认8080端口 nohup /usr/lib/jvm/jdk-17.0.14+7/bin/java -jar kafbat-ui-v1.0.0.jar \ --server.address=0.0.0.0 \ --server.port=8080 \ --kafka.clusters.default.bootstrapServers=localhost:9092 \ > ui.log 2>&1 &
# 端口占用替换为8081 nohup /usr/lib/jvm/jdk-17.0.14+7/bin/java -jar kafbat-ui-v1.0.0.jar \ --server.port=8081 \ --kafka.clusters.default.bootstrapServers=localhost:9092 \ > ui.log 2>&1
|
3. 服务验证与访问
|
bash # 查看端口监听 netstat -tlnp | grep 8080
# 查看启动日志 tail -f ui.log
|
启动成功标识:日志输出 Started KafbatUIApplication
浏览器访问地址:http://服务器IP:8080
4. UI启停命令
|
bash # 停止UI服务 pkill -f kafbat-ui-v1.0.0.jar
# 重启UI服务 cd /opt/kafka_2.13-3.7.0 nohup /usr/lib/jvm/jdk-17.0.14+7/bin/java -jar kafbat-ui-v1.0.0.jar \ --server.address=0.0.0.0 \ --server.port=8080 \ --kafka.clusters.default.bootstrapServers=localhost:9092 \ > ui.log 2>&1
|
5. UI核心功能
|
菜单模块
|
核心功能
|
|
Topics
|
查看、创建、删除Kafka主题
|
|
Messages
|
浏览消息内容,支持时间、偏移量过滤查询
|
|
Consumer Groups
|
查看消费者组、消费进度、消息积压量
|
|
Brokers
|
查看Kafka集群节点运行状态
|

四、librdkafka源码编译部署(Linux)
1. 源码下载(国内镜像,解决下载失败问题)
下载ZIP压缩包后上传至Linux服务器,解压编译。
2. 完整编译安装流程
|
bash # 解压源码包 unzip librdkafka-master.zip cd librdkafka-master
# 清理旧编译缓存文件 make clean
# 配置编译参数(按需开启组件) ./configure --prefix=/opt/librdkafka --enable-ssl --disable-sasl --disable-lz4 --disable-zstd
# 多线程编译 make -j4
# 安装成品库(核心步骤,分离编译文件与成品文件) make install
# 刷新系统库缓存 ldconfig
|
3. 编译结果验证
|
bash # 查看库文件 ls /opt/librdkafka/lib
# 查看头文件 ls /opt/librdkafka/include
|
成功标识:目录存在librdkafka.so、librdkafka++.so、rdkafka.h 等核心文件

4. librdkafka依赖关系说明
- • 核心库:librdkafka
- • 压缩组件:gzip(zlib-dev)、snappy(libsnappy-dev)、lz4(liblz4-dev)、zstd(libzstd-dev)
- • 安全组件:SSL(libssl-dev)
- • 认证组件:SASL(libsasl2-dev)、OAUTHBEARER(libcurl-dev)
五、Qt项目适配librdkafka避坑指南
1. win编译坑点总结
- • vcpkg静态不兼容,会导致MT/MD编译失败,需要在pro文件引入静态库宏定义,不建议使用。
- • VS2017 NuGet包版本与Qt版本不兼容,编译报错,查清楚后可使用。
- •使用vcpkg动态包。(修改位置,参考一下命令)
- 编译结果
-

-

2. 项目配置规范(.pro文件)
|
Plain Text # 引入静态库宏定义 DEFINES += LIBRDKAFKA_STATICLIB
# 链接核心依赖库 LIBS += -lrdkafka LIBS += -llz4
|
3. 代码引入规范
|
extern "C" { #include <rdkafka.h> }
或者
#include <rdkafkacpp.h>
|
4. 业务坑点
部分客户端压缩问题:kafka-king工具客户端推送消息会自己压缩,导致接收信息无法解析。
简易使用offsetexplorer工具进行模拟数据发送。(有一个不好的点,使用web端控制Kafbat UI删除完不用的消费者后,它依然保留。强迫症的同学要适应一下...)