Kafka 监控工具之CMAK
1. 概述
CMAK(Cluster Manager for Apache Kafka) 是由 Yahoo 开源的 Kafka 集群管理平台。我们可能听到更多的是 kafka-manager。主要是因为误用了 Apache 的商标,所以才从 kafka-manager 改名为 CMAK。
在 3.0.0.2 版本之前,kafka-manager 是不提供现成的编译包的,需要我们自己编译打包,老版本的安装可以参阅博文 Kafka 监控工具之Kafka Manager。在 3.0.0.2 版本之后我们可以直接下载编译后的 zip 包:
2. 下载
CMAK 环境要求:
- Kafka 0.8+
- Java 11+
- Zookeeper 3.5+
官方文档中没有明确说明 ZooKeeper 的版本要求,但是在实际实践中小于3.5版本会抛出异常。如果你不想升级你的 ZooKeeper 版本,你可以使用 CMAK 的旧版本 Kafka-manager,比如1.3.3.23版本。
由于我机器上只安装了 JDK 8,所以需要再安装一个 JDK 11:
sudo tar -zxvf jdk-11.0.8_osx-x64_bin.tar.gz -C /opt/
ln -s jdk-11.0.8.jdk/ jdk-11
JDK11 只为CMAK使用,其他还是使用 JDK 8。
这里 CMAK 以 3.0.0.5 版本为例:
wget https://github.com/yahoo/CMAK/releases/download/3.0.0.5/cmak-3.0.0.5.zip
解压安装包:
unzip cmak-3.0.0.5.zip
创建软连接便于升级:
ln -s cmak-3.0.0.5/ cmak
3. 配置
修改 /etc/profile
配置环境变量,添加如下配置:
# kafka manager
export CMAK_HOME=/opt/cmak
export PATH=${CMAK_HOME}/bin:$PATH
运行命令 source /etc/profile
使环境变量生效。
按如下方式修改配置文件 application.conf,修改ZooKeeper服务器地址:
cmak.zkhosts="127.0.0.1:2181,127.0.0.1:2181:2182,127.0.0.1:2181:2183"
由于我们的ZooKeeper集群是伪分布式模式,通过不同的端口号来模拟不同的服务器。如果是正常集群模式应为 cmak.zkhosts=”host1:2181,host2:2181,host3:2181….”。
4. 启动
默认使用 9000 端口,如果端口占用,可以通过参数指定端口:
cmak -Dconfig.file=/opt/cmak/conf/application.conf -Dhttp.port=9000 -java-home /opt/jdk-11/Contents/Home
参数解释:
- -Dconfig.file:指明 CMAK 配置文件路径
- -Dhttp.port:Web监听端口,默认9000端口
- -java-home:指定 JDK 路径,也可以不指定。这里由于需要用 JDK11,而我这台服务器上也安装了 JDK8,所以需要指定 JDK11 的路径。
启动 CMAK 服务后,通过 http://localhost:9000/
地址进入 WEB UI 界面:
可以通过 Add Cluster
菜单创建我们的 Kafka 集群:
注意的的是 Cluster Zookeeper Hosts 要配置 Kafka 在 ZooKeeper 中的 NameSpace,在这我们是 kafka
,具体取决于 Kafka 的配置:
zookeeper.connect=localhost:2181/kafka
看到如下页面表示我们已经创建好集群了:
如果你遇到报如下错误:
Yikes! KeeperErrorCode = Unimplemented for /kafka-manager/mutex Try again.
那么你需要升级 Zookeeper 到 3.5+ 版本。
创建成功后,你就可以看到你的 Kafka 信息:
参考:
- JDBC批量提交SQL的几点问题解答
- 工具推荐: 汽车CAN总线分析框架CANToolz
- Windows下jps, jconsole无法查看本地java进程问题解决
- DateFormat 线程不安全
- zip文件操作导致JVM crash
- 如何搭建你自己的“深度学习”机器?
- MySQL INSERT INTO...ON DUPLICATE KEY UPDATE的使用
- 通过Java代码来模拟乘法器
- INET_ATON()函数在MySQL5.6版本和5.7版本的差异
- Linux主机之间ssh免密登录配置
- 远控木马Posion Ivy开始肆虐缅甸和其它亚洲国家
- Slf4j+Logback配置文件变量使用小记
- Storm消息处理可靠性保证
- git+github创建分支&提交并贡献代码(linux环境)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 问题合集,持续更新
- ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
- 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
- OpenGL ES 变量、结构体、语句、函数、精度
- OpenGL ES for Android 绘制矩形和正方形
- OpenGL ES for Android 绘制立方体
- 服务化最佳实践
- OpenGL ES for Android 深度测试
- OpenGL ES for Android 绘制旋转的地球
- [Hei.Captcha] Asp.Net Core 跨平台图形验证码实现
- Asp.Net Core 3.1 获取不到Post、Put请求的内容 System.NotSupportedException Specified method is not supported
- OpenGL ES for Android 播放视频
- Centos 7 在线安装 离线安装 最新 Docker-compose 的正确姿势 实践笔记
- OpenGL ES for Android 视频缩放、旋转、平移
- OpenGL ES for Android 相机预览