Kafka监控系统Kafka Eagle剖析

〓1.概述

最近有同学留言反馈了使用Kafka监控工具Kafka Eagle的一些问题,这里笔者特意整理了这些问题。并且希望通过这篇博客来解答这些同学的在使用Kafka Eagle的时候遇到的一些困惑,同时也给出一些定位分析Kafka Eagle异常的时的解决办法。

2.内容

2.1 背景

在使用Kafka Eagle监控系统之前,笔者简单的介绍一下这款工具的用途。Kafka Eagle监控系统是一款用来监控Kafka集群的工具,目前更新的版本是v1.2.3,支持管理多个Kafka集群、管理Kafka主题(包含查看、删除、创建等)、消费者组合消费者实例监控、消息阻塞告警、Kafka集群健康状态查看等。目前Kafka Eagle v1.2.3整个系统所包含的功能,这里笔者给绘制成了一个图,结果如下图所示:

▌2.2 安装

接下来,我们开始安装Kafka Eagle系统,安装之前,我们需要准备好Kafka Eagle安装包。这里有2种方式:

下载编译好的安装包

下载源代码,然后自行编译安装

下面分别介绍这2种方式。

▌2.2.1 直接下载安装包

▌2.2.2 下载源代码,自行编译安装

Kafka Eagle系统的源代码托管在Github上,大家可以访问https://github.com/smartloli/kafka-eagle来获取源代码。Kafka Eagle源代码是由Maven工程来管理的,所以,在编译Kafka Eagle源代码之前,需要在本地开发环境中准备好你的Maven环境。

Maven安装比较简单,这里给大家介绍安装Maven的步骤:

# 步骤1:下载Maven安装包wgethttp://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz# 步骤2:解压Maven安装包tar-zxvf apache-maven-3.5.4-bin.tar.gz# 步骤3:重命名并移动到指定位置mvapache-maven-3.5.4/usr/local/maven# 步骤4:配置Maven环境编辑vi~/.bash_profileexport M2_HOME=/usr/local/mavenexport PATH=$PATH:$M2_HOME/bin# 步骤5:执行source命令让环境变量立即生效source~/.bash_profile# 步骤6:验证Maven是否安装成功mvn-v# 如果能打印Maven版本信息,则安装成功

然后,进入到Kafka Eagle源代码根目录,在根目录中有一个build.sh的脚本,执行该脚本进行源代码编译。编译成功后,控制台会打印相关信息,如下图所示:

▌2.2.3 配置Kafka Eagle

接下来,我们就开始配置Kafka Eagle系统,步骤如下:

▽1. 配置JAVA_HOME和KE_HOME

由于源代码核心实现采用的是Java语言,所以需要配置JDK环境,建议采用JDK8以上。配置内容如下:

vi~/.bash_profileexport JAVA_HOME=/usr/local/jdk8export KE_HOME=/data/soft/new/kafka-eagleexport PATH=$PATH:$JAVA_HOME/bin:$KE_HOME/bin

然后,执行source ~/.bash_profile命令让命令立即生效。如果不配置环境变量,可能在启动Kafka Eagle脚本ke.sh时抛出如下异常,异常信息如下:

[2018-07-2618:41:51] Error: The KE_HOME environment variable is not defined correctly.[2018-07-2618:41:51] Error: This environment variable is needed to run this program.[2018-07-2618:41:51] Error: The JAVA_HOME environment variable is not defined correctly.[2018-07-2618:41:51] Error: This environment variable is needed to run this program.

▽2. 配置system-config.properties文件

该文件在$KE_HOME/conf/目录,配置内容如下:

####################################### 配置多个Kafka集群所对应的Zookeeper######################################kafka.eagle.zk.cluster.alias=cluster1,cluster2cluster1.zk.list=dn1:2181,dn2:2181,dn3:2181cluster2.zk.list=tdn1:2181,tdn2:2181,tdn3:2181####################################### 设置Zookeeper线程数######################################kafka.zk.limit.size=25####################################### 设置Kafka Eagle浏览器访问端口######################################kafka.eagle.webui.port=8048####################################### 如果你的offsets存储在Kafka中,这里就配置# 属性值为kafka,如果是在Zookeeper中,可以# 注释该属性。一般情况下,Offsets的也和你消# 费者API有关系,如果你使用的Kafka版本为0.10.x# 以后的版本,但是,你的消费API使用的是0.8.2.x# 时的API,此时消费者依然是在Zookeeper中######################################cluster1.kafka.eagle.offset.storage=kafka

######################################

# 如果你的集群一个是新版本(0.10.x以上),

# 一个是老版本(0.8或0.9),可以这样设置,

# 如果都是新版本,那么可以将值都设置成kafka

######################################

cluster2.kafka.eagle.offset.storage=zookeeper####################################### 是否启动监控图表,默认是不启动的######################################kafka.eagle.metrics.charts=false####################################### 在使用Kafka SQL查询主题时,如果遇到错误,# 可以尝试开启这个属性,默认情况下,不开启######################################kafka.eagle.sql.fix.error=false####################################### 邮件服务器设置,用来告警######################################kafka.eagle.mail.enable=falsekafka.eagle.mail.sa=kafka.eagle.mail.username=kafka.eagle.mail.password=kafka.eagle.mail.server.host=kafka.eagle.mail.server.port=####################################### 设置告警用户,多个用户以英文逗号分隔######################################kafka.eagle.alert.users=smartloli.org@gmail.com####################################### 超级管理员删除主题的Token######################################kafka.eagle.topic.token=keadmin####################################### 如果启动Kafka SASL协议,开启该属性######################################kafka.eagle.sasl.enable=falsekafka.eagle.sasl.protocol=SASL_PLAINTEXTkafka.eagle.sasl.mechanism=PLAIN####################################### Kafka Eagle默认存储在Sqlite中,如果要使用# MySQL可以替换驱动、用户名、密码、连接地址#######################################kafka.eagle.driver=com.mysql.jdbc.Driver#kafka.eagle.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull#kafka.eagle.username=root#kafka.eagle.password=123456kafka.eagle.driver=org.sqlite.JDBCkafka.eagle.url=jdbc:sqlite:/Users/dengjie/workspace/kafka-egale/db/ke.dbkafka.eagle.username=rootkafka.eagle.password=root

▽3. 启动Kafka Eagle

配置完成后,可以执行Kafka Eagle脚本ke.sh。如果首次执行,需要给该脚本赋予执行权限,命令如下:

在ke.sh脚本中,支持以下命令:

〓3.预览

在反馈出现频率最多的问题,就是Consumer模块没有数据展示、趋势监控图没有数据、Kafka SQL查询Topic没有数据。下面围绕这3个问题来给大家演示,以及解释什么情况下出现这种情况。

▌3.1 Consumer模块展示

启动一个消费者程序,然后进入到Consumer模块,截图如下:

这里需要注意的时,Kafka在0.10.x之后的版本和之前的版本底层设计有了变化,在之前的版本消费者信息是存储在Zookeeper中的,在0.10.x版本之后,默认存储到了Kafka内部主题中,只保留了元数据信息存储在Zookeeper中,例如:Kafka Broker地址、Topic名称、分区等信息。

▌3.2. 监控趋势图

Kafka系统默认是没有开启JMX端口的,所以Kafka Eagle的监控趋势图默认采用不启用的方式,即kafka.eagle.metrics.charts=false。如果需要查看监控趋势图,需要开启Kafka系统的JMX端口,设置该端口在$KAFKA_HOME/bin/kafka-server-start.sh脚本中,设置内容如下:

vikafka-server-start.shif["x$KAFKA_HEAP_OPTS"="x"];thenexport KAFKA_HEAP_OPTS="-server -Xms2G -Xmx2G -XX:PermSize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=5 -XX:InitiatingHeapOccupancyPercent=70"export JMX_PORT="9999"#export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"fi

需要注意的时,这里的端口不一定非要设置成9999,端口只有可用,均可。Kafka Eagle系统会自动获取这个JMX端口,采集结果如下:

▌3.3 Kafka SQL查询Topic

还有一部分同学在Kafka Eagle系统的SQL查询Topic时,会出现查询不到数据的情况。这里查询不到数据可能情况有多种,首先需要排除Kafka集群因素,确保Kafka集群运行正常,Topic能够正常访问,并且Topic中是有数据的

〓4.总结

另外,如果在使用Kafka Eagle系统中遇到其他问题,可以查看$KE_HOME/logs/ke_console.out日志来分析具体的异常信息,一般都会提示具体的错误,大家可以根据错误提示来进行解决。

〓5.结束语

温馨提示

若觉得这篇文章不错,请分享到朋友圈。

更多干货,关注公众号:搬运工来架构。

搬运工来架构

挨踢人聚集地,一个分享干货的公众号

作者:哥不是小萝莉

来源:https://www.cnblogs.com/smartloli/p/9371904.html

你可能喜欢

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181116G0CFBZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券