资讯详情

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

本文选自电子工业出版社的新书《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扩展)的增加将引起重视和人工干预。

ActiveControllerCount

controller维护是责任partition leader当遇到这个值等于0并持续一段时间时(<1秒)时,必须发出明确的报警。

OfflinePartitionsCount

该指标报告是否活跃leader的partition数。

LeaderElectionRateAndTimeMs

leader选举频率(每秒多少次)和集群中没有leader状态时长(以毫秒为单位)

UncleanLeaderElectionsPerSec

如果这个指标存在,那就太糟糕了,这表明kafka集群在寻找partition leader节点出现故障

TotalTimeMs

该指标由四个其他指标的总和组成:

lqueue:在请求队列中等待时间

llocal:leader节点处理时间

lremote:等待follower节点响应时间

lresponse:发送响应时间

BytesInPerSec

BytesOutPerSec

Kafka的吞吐量

生产者测量指标

Response rate

响应速率是指数据从producer发送到broker的速率

Request rate

请求速率是指数据从producer发送到broker的速率

Request latency avg

平均延迟请求

Outgoing byte rate

Producer网络吞吐量

IO wait time ns avg

Producer的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-manger-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"

图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所示:

图7.3 启动Kafka Manager

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

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

图7.4 Kafka Manager的Web控制台

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

图7.5 添加Kafka集群

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

图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所示:

图7.7 监控Kafka Broker

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

图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所示:

图7.9 下载Kafka Tool

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

图7.10 Kafka Tool的启动界面

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

图7.11 添加Kafka集群

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

图7.12 Kafka集群的首界面

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

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

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

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

图7.13 Add Topic

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

图7.14 成功创建Topic

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

图7.15 通过Kakfa Tool接收数据

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

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

图7.16 通过命令行发送数据

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

图7.17 在Kafka Tool上接收数据

(7)这里的数据格式默认是“Byte Array”,我们可以在Properties的设置里面将其修改为String,并点击“Update”,如图7.18所示:

图7.18 修改Topic的数据格式

(8)回到Data页面,这时候数据将按照正确的格式显示,如图7.19所示:

图7.19 显示正确的数据

KafkaOffsetMonitor

KafkaOffsetMonitor是一个基于Web界面的管理平台,可以用来实时监控Kafka服务的Consumer以及它们所在的Partition中的Offset,我们可以浏览当前的消费者组,并且每个Topic的所有Partition的消费情况都可以进行实时的监控。KafkaOffsetMonitor可以从github上下载,地址是:https://github.com/quantifind/KafkaOffsetMonitor 。这里我们使用的是KafkaOffsetMonitor-assembly-0.2.0.jar

KafkaOffsetMonitor的安装启动比较简单。我们可以直接在kafka101的主机上执行下面的指令:

java -cp KafkaOffsetMonitor-assembly-0.2.0.jar \

com.quantifind.kafka.offsetapp.OffsetGetterWeb \

--zk kafka101:2181 \

--port 8089 \

--refresh 10.seconds \

--retain 1.days

其中:

lcom.quantifind.kafka.offsetapp.OffsetGetterWeb是运行Web监控的类

  • --zk用于指定ZooKeeper的地址

  • --port是Web运行端口

  • --refresh和--retain用于指定页面数据刷新的时间以及保留数据的时间值

打开浏览器访问8089端口,就可以打开KafkaOffsetMonitor的首页面,如图7.20所示。

图7.20 KafkaOffsetMonitor首页

选择“Topic List”,就可以监控某个具体的Topic信息了,如图7.21所示。

图7.21 通过KafkaOffsetMonitor监控Topic

JConsole

JConsole(Java Monitoring and Management Console),一种基于JMX的可视化监视、管理工具,从Java 5开始引入。JConsole是用Java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。命令行里打 jconsole,就可以直接启动了。

这里我们方便,我们直接在Window上启动JConsole。在CMD创建中直接输入JConsole,如图7.22所示。

图7.22 启动JConsole

JConsole的启动界面如图7.23所示。

图7.23  JConsole的启动界面

由于在前面配置Kafka Manager的时候,我们已经启用了broker 0和broker 1的JMX配置,所以这里可以直接通过JConsole连接到broker 0或者broker 1上。我们以broker 0 为例。选择“远程进程”,并输入broker 0的JMX地址,点击“连接”,如图7.24所示。

kafka101:9990

图7.24 通过JConsole连接broker 0

选择“不安全的连接”,进入JConsole监控的主界面,如图7.25和图7.26所示。

图7.25 不安全的连接

图7.26 JConsole的主页面

JConsole提供六个选项卡显示应用信息:

(1)概览选项卡:提供内存使用的概述、运行的线程数量、创建的对象数量以及CPU使用情况。

(2)内存选项卡:显示使用的内存数量。可以选择要监视的内存类型(堆、非堆或池)组合。

(3)线程选项卡:显示线程数量和每个线程的详细信息。

(4)类选项卡:显示加载的对象数量的信息。

(5)VM 概要选项卡:提供运行应用的JVM概要。

(6)MBean选项卡:显示有关应用的托管bean的信息。

这里我们选择“MBean选项卡”,就可以看到Kakfa相关的MBean信息,如图7.27所示。

图7.27 通过JConsole监控Kafka

以上图监控的参数“MessagesInPerSec”为例,它表示的是Kafka集群消息的速率。关于所有的Kafka监控的MBean信息,可以参考官方网站上的说明,地址是:http://kafka.apache.org/documentation/#monitoring

监控ZooKeeper

前面提到,整个Kafka的状态靠Zookeeper来维护,对于Zookeeper性能的监控也成为了整个Kafka监控计划中一个必不可少的组成部分。在典型的Kafka集群中, Kafka通过Zookeeper管理集群配置,例如:选举Leader,以及在Consumer Group发生变化时进行Rebalance;生产者Producer将消息发布到broker,Consumer从broker订阅并消费消息。这些操作都离不开ZooKeeper。所以在Kafka集群的管理监控中,ZooKeeper的监控也就成为了非常重要的一部分。

由于ZooKeeper本身也是由Java开发的应用程序,我们当然也可以前面提到的JMX的方式进行监控,例如使用JConsole。图7.28展示了通过JConsole监控ZooKeeper MBean的监控信息。

图7.28 通过JConsole监控ZooKeeper

这里我们也可以使用另一个客户端工具ZooInspector监控ZooKeeper。图7.29展示了它的主界面。

图7.29 通过ZooInspector监控ZooKeeper

      本文选自电子工业出版社的《kafka进阶》一书,略有修改,经出版社授权刊登于此。

      本书基于作者多年的教学与实践进行编写,重点介绍Kafka消息系统的核心原理与架构,内容涉及开发、运维、管理与架构。全书共11章,第1章,介绍Kafka体系架构基础,包括消息系统的基本知识、Kafka的体系架构与ZooKeeper;第2章,介绍Kafka的环境部署,以及基本的应用程序开发;第3章,介绍Kafka的生产者及其运行机制,包括生产者的创建和执行过程、生产者的消息发送模式和生产者的高级特性等;第4章,介绍Kafka的消费者及其运行机制,包括消费者的消费模式、消费者组与消费者、消费者的偏移量与提交及消费者的高级特性等;第5章,介绍Kafka服务器端的核心原理,包括主题与分区、消息的持久性与传输保障、Kafka配额与日志的管理;第6章,介绍Kafka的流处理引擎Kafka Stream;第7章,介绍使用不同的工具监控Kafka,包括Kafka Manager、Kafka Tool、KafkaOffsetMonitor和JConsole;第8章至第11章,介绍Kafka与外部系统的集成,包括集成Flink、集成Storm、集成Spark和集成Flume。

标签: 电子卡连接器组合

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台