原文地址:http://blog.csdn.net/qq_20641565/article/details/72897666
黑窗口的kafka集群没有监控,可以使用三方开源的监控工具,查询了些资料,网上流传最多的有三个监控工具:
先补一张生产数据(28个patition,不算冗余的数据 一天大概200G):
根据网友的实践:
Kafka Web Conslole
程序运行后,会定时去读取kafka集群分区的日志长度,读取完毕后,连接没有正常释放,一段时间后产生大量的socket连接,导致网络堵塞,所以不建议使用。
Kafka Manager
雅虎开源的一个监控工具,可以用来监控多个集群。
KafkaOffsetMonitor
相对上面来说,这个工具耦合性比较低,单用于监控比较适合而且部署很简单。
这里也介绍了下安装步骤,本来很简单的,但是版本不兼容,导致需要自己编译,然后记录下踩的坑。。。
(注意:kafka新的版本offset存储在自己的一个topic,不像老版本是存在zookeeper里面,所以用KafkaOffsetMonitor2.x的版本监控会有问题,根本监控不到数据,所以最好在github上面下载最新的版本自己编译,注意jdk版本)
我们使用KafkaOffsetMonitor监控工具
下载软件包:
github地址(0.2.1版本):点击下载
如果下载不懂,我已经上传了我的百度云:0.2.0版本,0.2.1版本
这个是用assembly插件直接把所有包打到了一个jar里面,上传服务器,直接启动就行,特别方便。
上传jar包到服务器,然后创建一个kafka监控的目录
mkdir /mydata/kafkamonitorlogs
执行如下语句启动kafka监控
java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -cp KafkaOffsetMonitor-assembly-0.2.1.jar \
com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--zk 10.104.109.176:2181,10.104.86.238:2182,10.104.122.21:2181 \
--port 8787 \
--refresh 10.seconds \
--retain 7.days 1>/mydata/kafkamonitorlogs/stdout.log 2>/mydata/kafkamonitorlogs/stderr.log &
start.sh
#!/bin/bash
java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -cp KafkaOffsetMonitor-assembly-0.2.1.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk 10.104.109.176:2181,10.104.86.238:2182,10.104.122.21:2181 --port 8787 --refresh 10.seconds --retain 7.days 1>/mydata/kafkamonitorlogs/stdout.log 2>/mydata/kafkamonitorlogs/stderr.log &
stop.sh
#!/bin/bash
killnum=`jps | grep OffsetGetterWeb | awk '{print $1}'`
kill -9 ${killnum}
echo "OK...."
启动之后查看web界面
访问:安装服务器的ip:8787
http://testslave02:8787
界面如下:
其他功能自己去试一试。
但是发现,没有获取到broker,kafka的版本安装过高,不兼容,只有自己去下载最新的源码来编译了
GitHub连接地址(上面有命令的详细介绍):点击进入
安装sbt环境:
下载sbt,官网上面的半天下载不懂,找了个csdn上面的链接 0.13.8版本的,地址如下:点击进入
解压安装sbt:
我放到了D盘下面,创建一个目录将sbt安装到该目录下:
D:\sbt0.13.8
修改sbtconfig.txt配置文件:
添加一项:
-Dsbt.ivy.home=D:/sbtivy
在修改用户目录下的.sbt目录下创建repositories文件并且写入:
[repositories]
public: http://maven.aliyun.com/nexus/content/groups/public/
typesafe:http://dl.bintray.com/typesafe/ivy-releases/ , [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
ivy-sbt-plugin:http://dl.bintray.com/sbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
在命令行执行 sbt,开始下载包,
但是执行到后面时候报错:
download failed: org.scalamacros#quasiquotes_2.10;2.0.1!quasiquotes_2.10.jar
在阿里云镜像里面没有,我果断把阿里镜像换成了默认的中央仓库,把repositories文件的
public: http://maven.aliyun.com/nexus/content/groups/public/
改为:
public: http://repo1.maven.org/maven2/
再次执行,OK
为了下载包速度快,我又把maven的仓库改为了阿里云的
开始编译KafkaOffsetMonitor
到工程目录下打开cmd执行
sbt clean assembly
等着。。。 突然发现,作者的在git上面写着的
If you do not want to build it manually, just download the current jar.
居然有编译好的,反正不管了,编译的也让它编译着,先直接下载上面提供的编译好的jar包。
地址:点击进入
如果下载不动的话,我也上传我自己的百度云了,链接:点击下载
将此jar包上传服务器
然后执行:
java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m \
-cp KafkaOffsetMonitor-assembly-0.4.1-SNAPSHOT.jar \
com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--offsetStorage kafka \
--kafkaBrokers 10.104.109.176:9092,10.104.86.238:9092,10.104.122.21:9092 \
--kafkaSecurityProtocol SASL_PLAINTEXT \
--zk 10.104.109.176:2181,10.104.86.238:2182,10.104.122.21:2181 \
--port 8787 \
--refresh 10.seconds \
--retain 5.days \
--dbName offsetapp_kafka
jdk版本不兼容:
我自己的电脑也是1.8jdk,虽然编译成功了 但是服务器上面是jdk1.7 刚编译的执行了也不兼容,把本机jdk换成1.7重新编译….
等了大概半个多小时,报错包又拉不下来,又把仓库换成public: http://repo1.maven.org/maven2/ 继续编译。。。。
编译失败。。报错版本问题。。。
然后想到一个办法:直接在服务器上面创建一个新用户,并把新用户的自己的环境变量设置成jdk1.8,然后在启动,启动命令如下(zk端口换了,之前用的cdh的,这次自己搭建的zk):
java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m \
-cp KafkaOffsetMonitor-assembly-0.4.1-SNAPSHOT.jar \
com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--offsetStorage kafka \
--kafkaBrokers testmaster:9092,testslave01:9092,testslave02:9092 \
--kafkaSecurityProtocol PLAINTEXT \
--zk testmaster:2188,testslave01:2188,testslave02:2188 \
--port 8787 \
--refresh 10.seconds \
--retain 5.days \
--dbName offsetapp_kafka
topic:创建topic的名称
partition:分区编号
offset:该partition已经消费了多少条message
logsize:该partition已经写入了多少条message
lag:该partition未消费多少条message
owner:gaipartition所属消费者
界面也都OK都能监控了: