kafka监控

Kafka 消息监控 - Kafka Eagle

1.概述

  在开发工作当中,消费 Kafka 集群中的消息时,数据的变动是我们所关心的,当业务并不复杂的前提下,我们可以使用 Kafka 提供的命令工具,配合 Zookeeper 客户端工具,可以很方便的完成我们的工作。随着业务的复杂化,Group 和 Topic 的增加,此时我们使用 Kafka 提供的命令工具,已预感到力不从心,这时候 Kafka 的监控系统此刻便尤为显得重要,我们需要观察消费应用的详情。 监控系统业界有很多杰出的开源监控系统。我们在早期,有使用 KafkaMonitor 和 Kafka Manager 等,不过随着业务的快速发展,以及互联网公司特有的一些需求,现有的开源的监控系统在性能、扩展性、和 DEVS 的使用效率方面,已经无法满足了。 因此,我们在过去的时间里,从互联网公司的一些需求出发,从各位 DEVS 的使用经验和反馈出发,结合业界的一些开源的 Kafka 消息监控,用监控的一些思考出发,设计开发了现在 Kafka 集群消息监控系统:Kafka Eagle。

  Kafka Eagle 用于监控 Kafka 集群中 Topic 被消费的情况。包含 Lag 的产生,Offset 的变动,Partition 的分布,Owner ,Topic 被创建的时间和修改的时间等信息。下载地址如下所示:

2.内容

  Kafka Eagle 涉及以下内容模块:

  • Dashboard
  • Topic(Create & List)
  • Consumers
  • Cluster Info

2.1 Dashboard

  我们通过在浏览器中输入 http://host:port/ke,访问 Kafka Eagle 的 Dashboard 页面。该页面包含以下内容:

  • Brokers
  • Topics
  • Zookeepers
  • Consumers
  • Kafka Brokers Graph

  展示 Kafka 集群的 Topic 数量,消费者数量,Kafka 的 Brokers 数,以及所属的 Zookeeper 集群信息。Dashboard 信息展示截图如下:

2.2 Topic

  在 Topic 模块下,包含创建 Topic 和展示 Topic 信息详情。

2.2.1 Create

  通过创建模块可以创建一个自定义分区和备份数的 Topic。如下图所示:

2.2.2 List

  该模块下列出 Kafka 集群中所有的 Topic,包含 Topic 的分区数,创建时间以及修改时间,如下图所示:

  上图中,每一个 Topic 名称对应一个详情的超链接,通过该链接可以查看该 Topic 的详情,如:分区索引号,Leader,Replicas 和 Isr,如下图所示所示:

2.3 Consumers

  该模块显示有消费记录的 Topic 信息,其中包含如下内容:

  • Running
  • Pending
  • Active Topic Graph
  • Offsets Rate Graph

2.4 Cluster Info

  该模块显示 Kafka 集群信息和 Zookeeper 集群信息,包含如下内容:

  • Kafka Broker Host & IP
  • Kafka Broker Created & Modify Date
  • Zookeeper Host & IP

3.数据采集

  Kafka Eagel 监控的消息数据源,来自于 Zookeeper。由于创建,修改或是消费 Kafka 的消息,都会在 Zookeeper 中进行注册,我们可以从中获取数据的变动,例如:Topic,Brokers,Partitions 以及 Group 等,Kafka 在 Zookeeper 的结构存储,如下图所示: 

4.总结

   Kafka Eagle 的安装使用很简单,下载安装,配置好 Kafka 集群所属的 Zookeeper 集群地址即可,安装部署文档地址如下:

5.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

前面有文章说到了一个叫kafka manager的kafka管理工具,这个工具管理kafka确实很强大,但是没有安全认证,随便都可以创建,删除,修改topic,而且告警系统,流量波动做的不好。所以,在这里浪尖,再给大家推荐一款kafka 的告警监控管理工具,kafka-eagle。

kafka-eagle主要是有几个我们关注 但kafkamanager不存在的点,值得一提:

流量,最长可以查看最近七天的流量波动图

lag size邮件告警

可以用kafkasql分析

1.下载解压

直接下载压缩包

http://download.smartloli.org/

源码地址

https://github.com/smartloli/kafka-eagle

建议直接下载压缩包,而不是使用源码编译,编译过程中容易出错。有兴趣的可以下载源码阅读一下。

解压

tar -zxf ~/Downloads/kafka-eagle-bin-1.2.4.tar.gz -C ./

给文件加充命名为kafka-eagle。

2. 配置

配置环境变量。

vi /etc/profile

export KE_HOME=/opt/hadoop/kafka-eagle
export PATH=$PATH:$KE_HOME/bin

3. 配置system-config.properties

浪尖这里运行了多个kafka版本,以此测试多版本多集群,具体配置方式可以参考下面配置。

######################################
# multi zookeeper&kafka cluster list
######################################
kafka.eagle.zk.cluster.alias=cluster1,cluster2
cluster1.zk.list=localhost:2181/kafka010
cluster2.zk.list=localhost:2181/kafka082
######################################
# zk client thread limit
######################################
kafka.zk.limit.size=25

######################################
# kafka eagle webui port
######################################
kafka.eagle.webui.port=8048

######################################
# kafka offset storage
######################################
cluster1.kafka.eagle.offset.storage=kafka
cluster2.kafka.eagle.offset.storage=zookeeper

######################################
# enable kafka metrics
######################################
kafka.eagle.metrics.charts=false

######################################
# alarm email configure
######################################
kafka.eagle.mail.enable=false
kafka.eagle.mail.sa=alert_sa
kafka.eagle.mail.username=alert_sa@163.com
kafka.eagle.mail.password=mqslimczkdqabbbh
kafka.eagle.mail.server.host=smtp.163.com
kafka.eagle.mail.server.port=25

######################################
# delete kafka topic token
######################################
kafka.eagle.topic.token=keadmin

######################################
# kafka sasl authenticate
######################################
kafka.eagle.sasl.enable=false
kafka.eagle.sasl.protocol=SASL_PLAINTEXT
kafka.eagle.sasl.mechanism=PLAIN

######################################
# kafka jdbc driver address
######################################
#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=mt2018@#

kafka.eagle.driver=org.sqlite.JDBC
kafka.eagle.url=jdbc:sqlite:/opt/hadoop/kafka-eagle/db/ke.db
kafka.eagle.username=root
kafka.eagle.password=smartloli

启动运行

在启动运行之前要做下面一步,

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home

否则,会报错误如下:

正式启动kafka-eagle

bin/ke.sh start

启动成功之后,会有如下日志,注意红框处。

打开浏览器,输入上面截图红框处提示的url

点击登陆之后进入

具体使用,可以参考手册

https://ke.smartloli.org/1.Overview/1.Overview.html

Kafka三款监控工具比较

  • 博客分类: 
  • MQ

 

在之前的博客中,介绍了Kafka Web Console这 个监控工具,在生产环境中使用,运行一段时间后,发现该工具会和Kafka生产者、消费者、ZooKeeper建立大量连接,从而导致网络阻塞。并且这个 Bug也在其他使用者中出现过,看来使用开源工具要慎重!该Bug暂未得到修复,不得已,只能研究下其他同类的Kafka监控软件。

通过研究,发现主流的三种kafka监控程序分别为:

  • Kafka Web Conslole
  • Kafka Manager
  • KafkaOffsetMonitor

现在依次介绍以上三种工具:

Kafka Web Conslole

使用Kafka Web Console,可以监控:

  • Brokers列表

  • Kafka 集群中 Topic列表,及对应的Partition、LogSiz e等信息

  • 点击Topic,可以浏览对应的Consumer Groups、Offset、Lag等信息

  • 生产和消费流量图、消息预览…

kafka-web-console

程序运行后,会定时去读取kafka集群分区的日志长度,读取完毕后,连接没有正常释放,一段时间后产生大量的socket连接,导致网络堵塞。

Kafka Manager

雅虎开源的Kafka集群管理工具:

  • 管理几个不同的集群

  • 监控集群的状态(topics, brokers, 副本分布, 分区分布)

  • 产生分区分配(Generate partition assignments)基于集群的当前状态

  • 重新分配分区

kafka-manager

KafkaOffsetMonitor

  • KafkaOffsetMonitor可以实时监控:

  • Kafka集群状态

  • Topic、Consumer Group列表

  • 图形化展示topic和consumer之间的关系

  • 图形化展示consumer的Offset、Lag等信息

    KafkaOffsetMonitor


总结

通过使用,个人总结以上三种监控程序的优缺点:

Kafka Web Console:监控功能较为全面,可以预览消息,监控Offset、Lag等信息,但存在bug,不建议在生产环境中使用。

Kafka Manager:偏向Kafka集群管理,若操作不当,容易导致集群出现故障。对Kafka实时生产和消费消息是通过JMX实现的。没有记录Offset、Lag等信息。

KafkaOffsetMonitor:程序一个jar包的形式运行,部署较为方便。只有监控功能,使用起来也较为安全。

若只需要监控功能,推荐使用KafkaOffsetMonito,若偏重Kafka集群管理,推荐使用Kafka Manager。

因为都是开源程序,稳定性欠缺。故需先了解清楚目前已存在哪些Bug,多测试一下,避免出现类似于Kafka Web Console的问题。

kafka监控

kafka-web-console

https://github.com/claudemamo/kafka-web-console

部署sbt:

http://www.scala-sbt.org/0.13/tutorial/Manual-Installation.html

http://www.scala-sbt.org/release/tutorial/zh-cn/Installing-sbt-on-Linux.html

KafkaOffsetMonitor

https://github.com/quantifind/KafkaOffsetMonitor/releases/tag/v0.2.0

 

java -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk localhost:12181 --port 8080 --refresh 5.minutes --retain 1.day

kafka 监控之Mx4jLoader

源码未做任何修改,在lib下添加jar包mx4j-tools-3.0.1

启动server之后访问 ip:8082

/**

 * If mx4j-tools is in the classpath call maybeLoad to load the HTTP interface of mx4j.

 *

 * The default port is 8082. To override that provide e.g. -Dmx4jport=8083

 * The default listen address is 0.0.0.0. To override that provide -Dmx4jaddress=127.0.0.1

 * This feature must be enabled with -Dmx4jenable=true

 *

 * This is a Scala port of org.apache.cassandra.utils.Mx4jTool written by Ran Tavory for CASSANDRA-1068

 * */

JMX监控指标参数列表如下:

 

参数Mbean名称说明
Message in rate"kafka.server":name="AllTopicsMessagesInPerSec",type="BrokerTopicMetrics"所有topic消息(进出)流量
Byte in rate"kafka.server":name="AllTopicsBytesInPerSec",type="BrokerTopicMetrics" 
Request rate"kafka.network":name="{Produce|Fetch-consumer|Fetch-follower}-RequestsPerSec",type="RequestMetrics" 
Byte out rate"kafka.server":name="AllTopicsBytesOutPerSec",type="BrokerTopicMetrics" 
Log flush rate and time"kafka.log":name="LogFlushRateAndTimeMs",type="LogFlushStats" 
# of under replicated partitions (|ISR| < |all replicas|)"kafka.server":name="UnderReplicatedPartitions",type="ReplicaManager"0
Is controller active on broker"kafka.controller":name="ActiveControllerCount",type="KafkaController"only one broker in the cluster should have 1
Leader election rate"kafka.controller":name="LeaderElectionRateAndTimeMs",type="ControllerStats"non-zero when there are broker failures
Unclean leader election rate"kafka.controller":name="UncleanLeaderElectionsPerSec",type="ControllerStats"0
Partition counts"kafka.server":name="PartitionCount",type="ReplicaManager"mostly even across brokers
Leader replica counts"kafka.server":name="LeaderCount",type="ReplicaManager"mostly even across brokers
ISR shrink rate"kafka.server":name="ISRShrinksPerSec",type="ReplicaManager"If a broker goes down, ISR for some of the partitions will shrink. When that broker is up again, ISR will be expanded once the replicas are fully caught up. Other than that, the expected value for both ISR shrink rate and expansion rate is 0.
ISR expansion rate"kafka.server":name="ISRExpandsPerSec",type="ReplicaManager"See above
Max lag in messages btw follower and leader replicas"kafka.server":name="([-.\w]+)-MaxLag",type="ReplicaFetcherManager"副本消息滞后数量
Lag in messages per follower replica"kafka.server":name="([-.\w]+)-ConsumerLag",type="FetcherLagMetrics"副本消息滞后数量
Requests waiting in the producer purgatory"kafka.server":name="PurgatorySize",type="ProducerRequestPurgatory" 
Requests waiting in the fetch purgatory"kafka.server":name="PurgatorySize",type="FetchRequestPurgatory" 
Request total time"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-TotalTimeMs",type="RequestMetrics" 
Time the request waiting in the request queue"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-QueueTimeMs",type="RequestMetrics" 
Time the request being processed at the leader"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-LocalTimeMs",type="RequestMetrics" 
Time the request waits for the follower"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-RemoteTimeMs",type="RequestMetrics" 
Time to send the response"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-ResponseSendTimeMs",type="RequestMetrics" 
Number of messages the consumer lags behind the producer by"kafka.consumer":name="([-.\w]+)-MaxLag",type="ConsumerFetcherManager"

转载于:https://my.oschina.net/hblt147/blog/2992890

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值