欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

几种常见的 Kafka 集群监控工具

一个功能健全的kafka集群可以处理相当大的数据量,由于消息系统是很多大型应用的基石,因此broker集群在性能上的缺陷,都会引起整个应用栈的各种问题。

Kafka的度量指标主要有以下三类:

1.Kafka服务器(Kafka)指标

2.生产者指标

3.消费者指标

另外,由于Kafka的状态靠Zookeeper来维护,对于Zookeeper性能的监控也成为了整个Kafka监控计划中一个必不可少的组成部分。

Kafka的监控指标

Broker度量指标

Kafka的服务端度量指标是为了监控broker,也是整个消息系统的核心。因为所有消息都通过kafka broker传递,然后被消费,所以对于broker集群上出现的问题的监控和告警就尤为重要。broker性能指标有以下三类:

  • Kafka本身的指标
  • 主机层面的指标
  • JVM垃圾回收指标
UnderReplicatedPartitions在一个运行健康的集群中,处于同步状态的副本数(ISR)应该与总副本数(简称AR:Assigned Repllicas)完全相等,如果分区的副本远远落后于leader,那这个follower将被ISR池删除,随之而来的是IsrShrinksPerSec(可理解为isr的缩水情况,后面会讲)的增加。由于kafka的高可用性必须通过副本来满足,所有有必要重点关注这个指标,让它长期处于大于0的状态。
IsrShrinksPerSec

IsrExpandsPerSec

任意一个分区的处于同步状态的副本数(ISR)应该保持稳定,只有一种例外,就是当你扩展broker节点或者删除某个partition的时候。为了保证高可用性,健康的kafka集群必须要保证最小ISR数,以防在某个partiton的leader挂掉时它的follower可以接管。如果IsrShrinksPerSec(ISR缩水) 增加了,但并没有随之而来的IsrExpandsPerSec(ISR扩展)的增加,就将引起重视并人工介入。
ActiveControllerCountcontroller的职责是维护partition leader的列表,当遇到这个值等于0且持续了一小段时间(<1秒)的时候,必须发出明确的告警。
OfflinePartitionsCount这个指标报告了没有活跃leader的partition数。
LeaderElectionRateAndTimeMsleader选举的频率(每秒钟多少次)和集群中无leader状态的时长(以毫秒为单位)
UncleanLeaderElectionsPerSec这个指标如果存在的话很糟糕,这说明kafka集群在寻找partition leader节点上出现了故障
TotalTimeMs这个指标是由4个其他指标的总和构成的:

lqueue:处于请求队列中的等待时间

llocal:leader节点处理的时间

lremote:等待follower节点响应的时间

lresponse:发送响应的时间

BytesInPerSec

BytesOutPerSec

Kafka的吞吐量

生产者度量指标

Response rate响应的速率是指数据从producer发送到broker的速率
Request rate请求的速率是指数据从producer发送到broker的速率
Request latency avg平均请求延迟
Outgoing byte rateProducer的网络吞吐量
IO wait time ns avgProducer的I/O等待的时间

消费者度量指标

ConsumerLag MaxLag指consumer当前的日志偏移量相对生产者的日志偏移量
BytesPerSec消费者的网络吞吐量
MessagesPerSec消息的消费速度
ZooKeeperCommitsPerSec当zookeeper处于高写负载的时候,将会遇到成为性能瓶颈,从而导致从kafka管道抓取数据变得缓慢。随着时间推移跟踪这个指标,可以帮助定位到zookeeper的性能问题,如果发现有大量发往zookeeper的commit请求,你需要考虑的是,要不对zookeeper集群进行扩展。
MinFetchRate消费者最小拉取的速率

通过官方网站的说明(http://kafka.apache.org/documentation/#monitoring),可以查看Kafka提供的所有的监控指标参数。在这里只是列出了部分主要的参数指标。

使用Kafka客户端监控工具

Kafka常用的客户端管理、监控工具,主要有以下几种:

  • Kafka Manager
  • Kafka Tool
  • KafkaOffsetMonitor
  • JConsole

其中,前三个工具都是专门用于Kafka集群的管理与监控;而JConsole(Java Monitoring and Management Console),是一种基于JMX的可视化监视、管理工具,安装好了JDK以后,Java就为我们提供了JConsole的客户端工具。利用它我们也可以监控Kafka的各项指标。

这里我们简单介绍一下JMX。JMX的全称为Java Management Extensions。可以管理、监控正在运行中的Java程序。常用于管理线程,内存,日志Level,服务重启,系统环境等。而Kafka底层也是基于Java的,所以我们也就可以使用JMX的标准来管理和监控运行中的Kafka了。

下面我们分别介绍它们的使用方法。

 Kafka Manager

Kafka Manager的Github地址是https://github.com/yahoo/kafka-manager。这款监控框架的好处在于监控内容相对丰富,既能够实现broker级常见的JMX监控(比如出入站流量监控),也能对consumer消费进度进行监控(比如lag等)。另外用户还能在页面上直接对集群进行管理,比如分区重分配或创建topic——当然这是一把双刃剑,好在kafka manager自己提供了只读机制,允许用户禁掉这些管理功能。

这里我们使用的版本是:kafka-manager-2.0.0.2.zip。安装和配置非常简单,按照下面的步骤配置Kafka Manager:

(1)首先,需要在启动Kafka集群的命令脚本中,增加JMX的相关参数。否则无法使用客户端工具管理和监控Kafka集群。这里我们以kafka101主机上运行的broker 0和broker 1为例,来为大家演示。进入kafka安装目录下的bin目录

cd /root/training/kafka_2.11-2.4.0/bin/

(2)修改kafka-run-class.sh文件,找到“JMX setting”的位置(第176行)。增加JMX Server的配置信息。如图7.1所示。

-Djava.rmi.server.hostname=kafka101

118ca7ba67b77a5a773c50839cfb3219.png

图7.1 修改Kafka Manager的JMX Setting

注意:

由于在kafka101主机上将会启动两个broker,为了方便可以在命令终端中使用export命令设置JMX的端口地址;也可以像下面这样把JMX的端口写到kafka-server-start.sh脚本中,如图7.2所示,修改第30行。

export JMX_PORT="9999"

ba2b5160d006a6d1a2785761db2c4ec7.png

图7.2 设置JMX的端口

(3)启动Kafka Broker 0

export JMX_PORT="9990"

bin/kafka-server-start.sh config/server.properties &

(4)重新开启一个命令行终端,启动Kafka Broker 1

export JMX_PORT="9991"

bin/kafka-server-start.sh config/server1.properties &

(5)将Kafka Manager的压缩包解压至/root/training目录

unzip kafka-manager-2.0.0.2.zip -d ~/training/

(6)进入Kafka Manager的conf目录,并修改application.conf文件

#这里我们指定ZooKeeper集群的地址

kafka-manager.zkhosts="kafka101:2181,kafka102:2181,kafka103:2181"

#将下面的这一行注释掉

#kafka-manager.zkhosts=${?ZK_HOSTS}

(7)采用nohup的方式启动Kafka Manager

nohup bin/kafka-manager &

也可以像下面这样启动Kafka Manager的时候,指定相关参数:

nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=8080 &

(8)启动成功后,将输出如下的日志信息,如图7.3所示:

1578df86aca1a8f385770a48194377cc.png

图7.3 启动Kafka Manager

可以看到,Kafka Manager将运行在9000端口上。

(9)通过浏览器访问9000端口,可以打开Kafka Manager的Web控制台,如图7.4所示:

ef0782d58944dcc3dafab8c4f99aed64.png

图7.4 Kafka Manager的Web控制台

(10)选择“Cluster”-->“Add Cluster”,添加一个新的Kafka集群。勾选“Enable JMX Polling”,并点击“Save”。如图7.5所示:

ee45115b0c139748d913647d8414d313.png

图7.5 添加Kafka集群

(11)添加成功后,点击“Go to Cluster View”,跳转到Kafka 集群的首页,如图7.6所示:

f68ce83c3bd51639df90af06b446fea3.png

图7.6 Kafka集群首页

在这里,可以看到当前的Kafka集群中共存在2个Broker,即:broker 0和broker 1;还有3个Topics。

(12)点击Brokers的数字“2”,跳转到Broker的监控页面上。在这里就可以实时监控Kafka集群Broker的相关信息了。如Kafka集群的吞吐量(Bytes in /sec、Bytes out /sec)等等,如图7.7所示:

1df89f729687155dda98df6891811eeb.png

图7.7 监控Kafka Broker

(13)图7.8所示,展示了Kafka集群Topic的监控信息。

2d7264603ea1ac877f34cff93ca8e36e.png

图7.8 监控Kafka Topic

 Kafka Tool

Kafka Tool是用于管理和使用Apache Kafka集群的图形应用程序。它提供了一种直观的界面风格,可让用户快速查看Kafka集群中的对象以及集群主题中存储的消息。它包含面向开发人员和管理员的功能,一些关键功能如下:

快速查看所有Kafka集群,包括其broker,主题和消费者

  • 查看分区中消息的内容并添加新消息
  • 查看消费者的偏移量,包括Apache Storm中的spout消费者
  • 以良好的格式显示JSON和XML消息
  • 添加和删除主题以及其他管理功能
  • 将单个消息从您的分区保存到本地硬盘驱动器
  • 编写自己的插件,使您可以查看自定义数据格式
  • Kafka工具可在Windows,Linux和Mac OS上运行

从Kafka Tool的官方网站(https://www.kafkatool.com/download.html)上,直接下载Kafka Tool。这里我们直接下载Kafka Tool 2.0.8的版本。如下图7.9所示:

f9af79d9c73f172b11b4f744b42e7046.png

图7.9 下载Kafka Tool

下载完成后,直接安装启动即可。图7.10展示了启动的初始界面。

4d2355ebbd65bca11dcd7060ef9749fe.png

图7.10 Kafka Tool的启动界面

添加一个Kafka Cluster集群,并测试。如图7.11所示:

179d9e96dbcb02a52af2ca46a8320bca.png

图7.11 添加Kafka集群

点击“是”,进入Kafka集群的首界面。如图7.12所示:

5bbc75c8e0db2e7060fdf5f1cf144dc8.png

图7.12 Kafka集群的首界面

在这里可以看到Kafka集群中的Broker信息、Topics的信息以及Consumers消费者的信息。

现在我们使用Kafka Tool来创建一个新的Topic。

(1)选择“Browsers”中集群的“Topics”节点,并在右边的界面上点击0076796cbf568d2b1be213d1bfb07da8.png按钮,添加一个新的Topic。

(2)输入Topic的名字、分区数、以及每个分区的副本数。这里我们新创建的Topic名称是mytopic2,它由两个分区组成,并且每个分区的副本数为。如图7.13所示。

3fce17a9b05ac2f6c8e55c78d5c1594c.png

图7.13 Add Topic

(3)点击“Add”,将成功创建Topic,如图7.14所示。

8caf63276c4ae1dc9d4872cd07b16500.png

图7.14 成功创建Topic

(4)现在我们使用Kafka Tool来接收mytopic2上的消息数据。选择刚刚创建好的mytopic2的主题,并在右边的窗口中选择“Data”的页面,如图7.15所示。

97743e26a44253ffd377c83374484cc0.png

图7.15 通过Kakfa Tool接收数据

(5)启动一个Kafka Producer的命令行终端,并发送一些消息。如图7.16所示:

bin/kafka-console-producer.sh --broker-list kafka101:9092 --topic mytopic2

24a3152456d16525fcdc5cfeb70109b8.png

图7.16 通过命令行发送数据

(6)在Kafka Tool上,点击16ce3552a5ec8faefcc8dd0ebf348b66.png接收消息。这里就可以看到刚才我们在Kafka Producer命令行上发送的消息。如图7.17所示: