一文聊透如何监控 Kafka 服务

云计算 Kafka
今天我们来讲解几款 Kafka 常用可视化监控工具,主要有以下几个 「JConsole」、「Kafka Manager」、「Kafka Offset Explorer」、「KafkaOffsetMonitor」、「LogiKM」。

大家好,我是 华仔, 又跟大家见面了。

对于 Kafka 来说,监控始终是一个难题。目前,没有一款免费监控软件能够满足大部分用户需求,这些监控软件各有特色但都不够全面。

今天我们来讲解几款 Kafka 常用可视化监控工具,主要有以下几个 「JConsole」、「Kafka Manager」、「Kafka Offset Explorer」、「KafkaOffsetMonitor」、「LogiKM」。

这里说明下,第一个「Jconsole」是基于 JMX 的可视化监控管理工具,安装好 JDK 之后,Java 就提供了 JConsole 客户端工具,利用它可以监控 Kafka 的各项指标。其他几个都是专门用来 Kafka 集群管理与监控的。

下面分别介绍下这几款监控工具的使用。

一、JConsole

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

JConsole 是一种基于 JMX 的可视化监控和管理工具,从 Java 5 开始被引入, 用来监控 VM,总体来说, 它是社区自带的一个小工具,对于一般简单的监控场景,它还能应付,但是它毕竟功能有限,复杂的监控整体解决方案,还是要依靠监控框架。

  1. 修改 kakfa-server-start.sh 脚本的 JXM_PORT 配置,如下图:
export JMX_PORT="9999"

图片

  1. 这里我们直接在 windows 上启动 JConsole,在 CMD 命令行中输入 JConsole 并回车, 如下图:

图片

此时会调起 JConsole 的启动界面。

图片

当弹出 "安全连接失败" 提示框,选择 "不安全的连接" 按钮, 进入 JConsole 监控的主界面, 如下图所示:

图片

图片

图片

图片

二、KafkaManager

Kafka Manager 是 yahoo 在 2015 年开源的一款 Kafka 监控软件,底层使用 Scala 语言编写,用来管理和监控 Kafka 集群。

这款软件是众多 Kafka 监控软件中的翘楚,无论是界面展示内容的丰富程度,还是管理集群功能的全面性,Kafka Manager 都数一数二。

目前 Kafka Manager 已经支持监控新版本 Consumer,如果用户在使用 Kafka Manager 时无法看到新版本的 Consumer Group  信息,那么就需要检查一下是否使用了过旧版本的 Kafka Manager。

这个管理工具可以很容易地发现分布在集群中的哪些 topic 分布不均匀,或者是分区在整个集群分布不均匀的的情况。

它支持管理多个集群、选择副本、副本重新分配以及创建 Topic。同时,这个管理工具也是一个非常好的可以快速浏览这个集群的工具,有如下功能:

  1. 管理多个kafka集群。
  2. 便捷的检查kafka集群状态(topics,brokers,备份分布情况,分区分布情况)。
  3. 选择你要运行的副本。
  4. 基于当前分区状况进行。
  5. 可以选择topic配置并创建topic(0.8.1.1和0.8.2的配置不同)。
  6. 删除topic(只支持0.8.2以上的版本并且要在broker配置中设置delete.topic.enable=true)。
  7. Topic list会指明哪些topic被删除(在0.8.2以上版本适用)。
  8. 为已存在的topic增加分区。
  9. 为已存在的topic更新配置。
  10. 在多个topic上批量重分区。
  11. 在多个topic上批量重分区(可选partition broker位置)。

kafka-manager 项目地址:https://github.com/yahoo/kafka-manager

本文我们使用版本:kafka-manager-3.0.0.5.zip,项目已改名位 CMAK,其安装和配置非常简单,可以按照下面的步骤配置 Kafka Manager。

1、在启动 Kafka 集群的命令脚本中,增加 JMX 的相关参数,否则无法使用客户端工具管理和监控 Kafka 集群。这里我们以本地虚拟机为例。

2、修改 Kafka-run-class.sh 文件,找到 JMX settings 的配置位置,增加 JMX Server 的配置信息。

#此处可以改为自己的hostname
-Djava.rmi.server.hostname=LAPTOP-3B77RHGG

图片

3、修改 kakfa-server-start.sh 脚本的 JXM_PORT 配置,如下图:

export JMX_PORT="9999"

图片

4、启动 kafka。

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

5、下载 Kafka Manager,并解压到 /home/wangjianghua/src/ 目录下。

# github地址
https://github.com/yahoo/CMAK
# 下载版本 kafka-manager-3.0.0.5
wget https://github.com/yahoo/CMAK/releases/download/3.0.0.5/cmak-3.0.0.5.zip
# 解压文件
unzip cmak-3.0.0.5.zip

6、修改配置,进入 Kafka Manager 的 conf 目录,修改 application.conf 文件。

# 这里是指定 zookeeper 集群的地址,如果有多个,逗号隔开
cmak.zkhosts="localhost:2181"

7、启动 Kafka Manager 。

# nohup 方式
nohup bin/cmak &
# 指定参数方式启动  默认启动端口 9000
nohup bin/cmak -Dconfig.file=conf/application.conf -Dhttp.port=9000 &

8、启动成功后,输出如下日志信息。

图片

我们使用 bin/cmak 这个命令来启动,会使用默认配置文件和端口号9000。

启动完毕后可以查看端口是否启动,由于启动过程需要一段时间,端口起来的时间可能会延后。

从日志中可以看出, Kafka Manager 将运行在 9000 端口上,使用ip地址:端口访问测试。

图片

可以看到,此时已经启动成功了。

如果报如下错误,请升级jdk版本到11。

图片

1、测试 KafkaManager

(1)新建 Cluster

点击【Cluster】>【Add Cluster】打开如下添加集群的配置界面:

输入集群的名字(如Kafka-Cluster-1)和 Zookeeper 服务器地址(如localhost:2181),选择最接近的Kafka版本(如2.7)

注意:如果没有在 Kafka 中配置过 JMX_PORT,千万不要选择第一个复选框。Enable JMX Polling 如果选择了该复选框,Kafka-manager 可能会无法启动。

其他 broker 相关的配置可以根据自己需要进行配置,默认情况下,点击【保存】时,会提示几个默认值为1的配置错误,需要配置为>=2的值。提示如下:

图片

新建完成后,运行界面如下:

图片

图片

图片

(2)Topic List

图片

(3)Broker

图片

2、管理 KafkaManager

(1)创建 Topic

点击【Topic】>【Create】可以方便的创建并配置主题。如下图所示:

(2)查看 Topic

点击【topic】下面的 topic 名称,即可查看对应 topic 信息。

图片

三、Kafka Offset Explorer

Kafka Tool 是用来管理和使用 Kafka 集群的图形应用程序。提供了一种直观的界面,让用户可以快速查看 Kafka 集群中的对象及集群主题中存储的信息,关键功能如下:

  1. 快速查看所有 Kafka 集群,包括 Broker、主题、消费者等。
  2. 查看分区中消息的内容并添加信息消息。
  3. 查看消费者偏移量。
  4. 支持 JSON 、XML 格式输出。
  5. 添加和删除主题以及其他管理功能。
  6. 支持自定义插件。

从 Kafka Tool 官网直接下载 Kafka Offset Explorer 2.3.2 版本,下载完成后,直接按照启动即可。

图片

添加一个 Kafka Cluster 集群并测试,直接连接测试如下:

图片

单击“”进入 Kafka 集群的首页。

图片

通过上面图示我们可以看到 Kafka 集群的 Broker 信息、 Topics 信息以及 Consumers 信息。

现在我们来创建一个 Topic。

1、 点击  "Browers" 集群中的 "Topics" 节点,并在右边的界面中单击。

图片

按钮,或者右击 "Topics" 节点2、 输入 Topic 名称、分区数、每个分区的副本数,如下图所示:3、 单击 "Add" 按钮,成功创建 Topic,如下图所示:

图片

4、现在我们来用该工具来接收 message2 上的消息数据。,选择刚创建的主题 message2,并在右边的窗口选择 "Data" 选项卡,如下图所示:

图片

5、 启动一个 Kafka Producer 命令行终端,发送一些消息,如下图所示:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic message2

图片

6、这里的数据格式默认是 "Byte Array",可以在 Properties 的设置中将其修改为 String,并单击 "Update" 按钮,如下图所示:

7、再次回到 Data 页面,此时数据将按照正确的格式展示,如下图所示:

因为中间在终端打了好多回车,所以出来也是空白值。

四、KafkaOffsetMonitor

KafkaOffsetMonitor 是一款 Kafka 开源社区提供的基于 web 界面的管理平台,可以用来实时监控 Kafka 服务的消费组以及它们所在分区的 Offset,你可以通过浏览当前的消费者组,并且每个 Topic 的所有分区的消费情况都可以进行实时监控。

它让我们很直观的知道,每个 Partition 的 Message 是否消费掉,有没有阻塞情况等等。这个 Web 管理平台保留的Partition、Offset 和它的 Consumer 的相关历史数据,我们可以通过浏览 Web 管理的相关模块,清楚的知道最近一段时间的消费情况。

该Web管理平台有以下功能:

  1. 对 Consumer 的消费监控,并列出每个 Consumer 的 Offset 数据。
  2. 保护消费者组列表信息。
  3. 每个 Topic 的所有 Partition 列表包含:Topic、Pid、Offset、LogSize、Lag 以及 Owner 等等。
  4. 浏览查阅 Topic 的历史消费信息。

它的安装比较简单,下载链接: 链接:https://pan.baidu.com/s/1Vfcfvci0g4YwSuYjcSpf0w?pwd=8484 提取码:8484。

将其放到某个目录下,然后在该目录下执行如下命令:

java -cp KafkaOffsetMonitor-assembly-0.3.0.jar \
com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--offsetStorage kafka \
--zk localhost:2181 \
--port 8080 \
--refresh 10.seconds \
--retain 1.days

这里简单介绍下命令的含义:

  1. com.quantifind.kafka.offsetapp.OffsetGetterWeb 是运行的 web 监控类。
  2. --zk 用来指定 zookeeper 的地址。
  3. --port 用来指定 web 运行的端口。
  4. --refresh 、--retain 用来指定页面数据刷新的时间以及保留数据的时间。

图片

打开浏览器访问 8080 端口,就可以打开 KafkaOffsetMonitor 的首页,如下图所示:

图片

然后选择 "Topic List" 选项卡,就可以监控某个 Topic 中的具体消费者消息,如下图所示:

图片

五、LogiKM

最后给大家推荐一款非常实用牛逼的监控工具, 它是滴滴开源的号称 "东半球最简单易用的一站式云原生实时流数据平台"。

可以点击官方进行学习:https://knowstreaming.com。

开发文档如下:https://doc.knowstreaming.com/product/1-brief-introduction。

责任编辑:姜华 来源: 华仔聊技术
相关推荐

2022-05-15 09:16:28

IPv6IPIP地址

2022-02-16 07:32:10

性能代码编程

2022-03-10 07:58:12

ReactorNetty运转架构

2020-03-26 09:18:54

高薪本质因素

2019-11-12 15:11:45

秒杀流量高可用

2023-05-04 08:24:52

ChatGPT产品经理工业革命

2020-01-02 09:06:23

微服务数据框架

2021-05-29 10:11:00

Kafa数据业务

2020-08-04 10:56:09

进程线程协程

2020-07-16 09:02:45

aPaaS云计算aPaaS平台

2021-01-18 13:05:52

Serverless Serverfull FaaS

2023-07-07 08:00:00

KafkaSpringBoo

2020-12-01 11:34:14

Elasticsear

2023-11-09 08:41:25

DevOpsAIOps软件

2023-12-26 07:40:34

2020-12-07 06:19:50

监控前端用户

2021-08-27 10:14:16

Thanos监控开源

2022-04-28 10:41:08

SaaS业务方式

2019-08-07 10:44:28

MySQLGoogle

2021-08-09 10:20:04

Thanos监控架构
点赞
收藏

51CTO技术栈公众号