一、KafkaOffsetMonitor简述

KafkaOffsetMonitor是Kafka的一款客户端消费监控工具,用来实时监控Kafka服务的Consumer以及它们所在的Partition中的Offset,我们可以浏览当前的消费者组,并且每个Topic的所有Partition的消费情况都可以一目了然。

二、KafkaOffsetMonitor下载

KafkaOffsetMonitor托管在Github上,可以通过Github下载。
下载地址:https://github.com/quantifind/KafkaOffsetMonitor/releases

或者下载百度网盘:链接:https://pan.baidu.com/s/1geEBEvT 密码:jaeu

三、KafkaOffsetMonitor启动

将下载下来的KafkaOffsetMonitor jar包上传到linux上,可以新建一个目录KafkaMonitor,用于存放KafkaOffsetMonitor-assembly-0.2.0.jar进入到KafkaMonitor目录下,通过java编译命令来运行这个jar包:

[root@kafka50 KafkaMonitor]# java -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk 10.0.0.50:12181,10.0.0.60:12181,10.0.0.70:12181 --port 8088  --refresh 5.seconds --retain 1.days
按回车后,可以看到控制台输出:serving resources from: jar:file:/data/KafkaMonitor/KafkaOffsetMonitor-assembly-0.2.0.jar!/offsetapp
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2018-01-05 21:17:36.267:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT
log4j:WARN No appenders could be found for logger (org.I0Itec.zkclient.ZkConnection).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2018-01-05 21:17:36.630:INFO:oejsh.ContextHandler:started o.e.j.s.ServletContextHandler{/,jar:file:/data/KafkaMonitor/KafkaOffsetMonitor-assembly-0.2.0.jar!/offsetapp}
2018-01-05 21:17:36.662:INFO:oejs.AbstractConnector:Started SocketConnector@0.0.0.0:8088

如果没有指定端口,则默认会开启一个随机端口。

参数说明:zk :zookeeper主机地址,如果有多个,用逗号隔开
port :应用程序端口
refresh :应用程序在数据库中刷新和存储点的频率
retain :在db中保留多长时间
dbName :保存的数据库文件名,默认为offsetapp

为了更方便的启动KafkaOffsetMonitor,可以写一个启动脚本来直接运行,我这里新建一个名为:kafka-monitor-start.sh的脚本,然后编辑这个脚本:

[root@kafka50 KafkaMonitor]# vim kafka-monitor-start.sh
java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m  -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--port 8088 \
--zk 10.0.0.50:12181,10.0.0.60:12181,10.0.0.70:12181 \
--refresh 5.minutes \
--retain 1.day >/dev/null 2>&1;

然后退出保存即可,接下来修改一下kafka-monitor-start.sh的权限

[root@kafka50 KafkaMonitor]# chmod +x kafka-monitor-start.sh 

启动KafkaOffsetMonitor:

[root@kafka50 KafkaMonitor]# nohup /data/KafkaMonitor/kafka-monitor-start.sh &
[1] 6551
[root@kafka50 KafkaMonitor]# lsof -i:8088
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    6552 root   16u  IPv6  26047      0t0  TCP *:radan-http (LISTEN)

四、KafkaOffsetMonitor Web UI

在游览器中输入:http://ip:port即可以查看KafkaOffsetMonitor Web UI,如下图:

在下图中有一个Visualizations选项卡,点击其中的Cluster Overview可以查看当前Kafka集群的Broker情况

五、简单的Producer

1、新建一个Topic

  首先为本次试验新建一个Topic,命令如下:

bin/kafka-topics.sh \--create \--zookeeper 10.0.0.50:12181 \--replication-factor 3 \--partition 3 \--topic kafkamonitor-simpleproducer

2、新建SimpleProducer代码

  在上一篇文章中提到的Producer封装Github代码的基础上,写了一个往kafkamonitor-simpleproducer发送message的java代码。

import com.ckm.kafka.producer.impl.KafkaProducerToolImpl;
import com.ckm.kafka.producer.inter.KafkaProducerTool;/*** Created by ckm on 2016/8/30.*/
public class SimpleProducer {public static void main(String[] args) {KafkaProducerTool kafkaProducerTool = new KafkaProducerToolImpl();int i = 0;String message = "";while (true) {message = "test-simple-producer : " + i ++;kafkaProducerTool.publishMessage("kafkamonitor-simpleproducer", message);}}
}

  程序运行效果: 
  

3、ConsoleConsumer消费该topic

  用kafka自带的ConsoleConsumer消费kafkamonitor-simpleproducer中的message。

bin/kafka-console-consumer.sh --zookeeper m000:2181 --from-beginning --topic kafkamonitor-simpleproducer

  消费截图如下: 
  

4、KafkaOffsetMonitor页面

(1)在Topic List选项卡中,我们可以看到刚才新建的kafkamonitor-simpleproducer 
  
(2)点开后,能看到有一个console-consumer正在消费该topic 
  
(3)继续进入该Consumer,可以查看该Consumer当前的消费状况 
  
  这张图片的左上角显示了当前Topic的生产速率,右上角显示了当前Consumer的消费速率。 
  图片中还有三种颜色的线条,蓝色的表示当前Topic中的Message数目,灰色的表示当前Consumer消费的offset位置,红色的表示蓝色灰色的差值,即当前Consumer滞后于Producer的message数目。 
(4)看一眼各partition中的message消费情况 
  
  从上图可以看到,当前有3个Partition,每个Partition中的message数目分布很不均匀。这里可以与接下来的自定义Producer的情况进行一个对比。

六、自定义Partitioner的Producer

1、新建一个Topic

bin/kafka-topics.sh \--create \--zookeeper 10.0.0.50:12181 \--replication-factor 3 \--partition 3 \--topic kafkamonitor-partitionedproducer

2、Partitioner代码

  逻辑很简单,循环依次往各Partition中发送message。

import kafka.producer.Partitioner;/*** Created by ckm on 2018/1/8.*/
public class TestPartitioner implements Partitioner {public TestPartitioner() {}@Overridepublic int partition(Object key, int numPartitions) {int intKey = (int) key;return intKey % numPartitions;}
}

3、Producer代码

  将自定义的Partitioner设置到Producer,其他调用过程和二中类似。

import com.ckm.kafka.producer.impl.KafkaProducerToolImpl;
import com.ckm.kafka.producer.inter.KafkaProducerTool;/*** Created by ckm on 2016/8/30.*/
public class PartitionedProducer {public static void main(String[] args) {KafkaProducerTool kafkaProducerTool = new KafkaProducerToolImpl();kafkaProducerTool.getProducerProperties().put("partitioner.class", "TestPartitioner");int i = 0;String message = "";while (true) {message = "test-partitioner-producer : " + i;System.out.println(message);kafkaProducerTool.publishPartitionedMessage("kafkamonitor-partitionedproducer", i + "", message);i ++;}}
}

  代码运行效果如下图: 
  

4、ConsoleConsumer消费Message

bin/kafka-console-consumer.sh --zookeeper 10.0.0.50:12181 --from-beginning --topic kafkamonitor-partitionedproducer

  消费效果如下图: 
  

5、KafkaOffsetMonitor页面

  其他页面与上面的类似,这里只观察一下每个partition中的message数目与第二节中的对比。可以看到这里每个Partition中message分别是很均匀的。 
  

注意事项: 
  注意这里有一个坑,默认情况下Producer往一个不存在的Topic发送message时会自动创建这个Topic。由于在这个封装中,有同时传递message和topic的情况,如果调用方法时传入的参数反了,将会在Kafka集群中自动创建Topic。在正常情况下,应该是先把Topic根据需要创建好,然后Producer往该Topic发送Message,最好把Kafka这个默认自动创建Topic的功能关掉。 
  那么,假设真的不小心创建了多余的Topic,在删除时,会出现“marked for deletion”提示,只是将该topic标记为删除,使用list命令仍然能看到。如果需要调整这两个功能的话,在server.properties中配置如下两个参数:

参数 默认值 作用
auto.create.topics.enable true Enable auto creation of topic on the server
delete.topic.enable false Enables delete topic. Delete topic through the admin tool will have no effect if this config is turned off

七,KafkaOffsetMonitor 总结

KafkaOffsetMonitor:程序一个jar包的形式运行,部署较为方便。只有监控功能,使用起来也较为安全。
除了KafkaOffsetMonitor,Kafka监控工具还有另外两款:
Kafka Web Console:监控功能较为全面,可以预览消息,监控Offset、Lag等信息,但存在bug,不建议在生产环境中使用。
Kafka Manager:偏向Kafka集群管理,若操作不当,容易导致集群出现故障。对Kafka实时生产和消费消息是通过JMX实现的。没有记录Offset、Lag等信息。

转载于:https://www.cnblogs.com/dadonggg/p/8242682.html

Kafka监控工具KafkaOffsetMonitor配置及使用相关推荐

  1. Kafka系列之-Kafka监控工具KafkaOffsetMonitor配置及使用

    KafkaOffsetMonitor是一个可以用于监控Kafka的Topic及Consumer消费状况的工具,其配置和使用特别的方便.源项目Github地址为:https://github.com/q ...

  2. ELK5.3+Kafka集群配置

    [一]资源准备 # 3台4C*8G, 安装Zookeeper.Kafka.Logstash--Broker(input: filebeat; output: Kafka) 10.101.2.23 10 ...

  3. 汽车位置服务之kafka集群配置注意事项

    1)  重复消费问题. 问题描述  采用kafka读取消息进行处理时,consumer会重复读取afka队列中的数据. 问题原因  kafka的consumer消费数据时首先会从broker里读取一批 ...

  4. Kafka教程(安装/配置/开发/面试题)

    [rabbitmq教程]https://bigbird.blog.csdn.net/article/details/81436980 [Flink教程]https://blog.csdn.net/he ...

  5. kafka集群配置(三台机器)

    前提:kafka基于zookeeper配置 解压安装包 ###将压缩包压缩到指定位置tar -zxvf kafka_2.11-1.01.tgz -C /usr/local/src/ 改名 mv kaf ...

  6. kafka安装及配置过程

    来来先扫一下,一码不扫何以扫天下 简介 Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目.Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量, ...

  7. linux环境kafka安装及配置

    linux环境kafka下载安装 下载资源 安装zookeeper kafka安装及配置 kafka安装(单体) kafka集群配置方式 kafka开启kerberos认证 kafka自带zookee ...

  8. 小木大数据-kafka安装及配置

    kafka安装及配置 大家好,今天我要给大家介绍一下kafka的安装及配置的方式. 首先介绍一下什么叫kafka.Kafka是一个发布订阅消息系统,它的用途小木我理解的是,我们有一个温度传感器,然后k ...

  9. Kafka监控KafkaOffsetMonitor【转】

    1.概述 前面给大家介绍了Kafka的背景以及一些应用场景,并附带上演示了Kafka的简单示例.然后,在开发的过程当中,我们会发现一些问题,那就是消息的监控情况.虽然,在启动Kafka的相关服务后,我 ...

最新文章

  1. AndroidStudio-4-如何导入项目
  2. 训练图像预处理函数功能(paddle)
  3. 【推导】计蒜客17119 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function
  4. 让数据大白于天下:GCC插件实现代码分析和安全审计
  5. 3D打印软件推荐|常用3D打印软件有哪些?
  6. 全国各省份简称、省会、经纬度
  7. 代理内网穿透-Lcx.exe-venom-proxychains
  8. JavaScript轻应用网络模块介绍
  9. Tkinter保姆级教程(上)
  10. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-29期...
  11. 众人皆阳我独阴,分享与小阳人共同生活一周体验!
  12. 哪些东西买了之后,会让人因生活质量和幸福感提升而感觉相见恨晚?
  13. Linux fsck命令详解
  14. NING的2021年复盘
  15. react 前端实现打印发票/图片
  16. batch manufacturing problem
  17. HTML中基本元素基本设置(例如:字体颜色、大小、背景颜色)。
  18. Linux 服务器之间互信
  19. 唯美云海高清动态壁纸分享
  20. git设置当前项目的用户名称name和邮箱email

热门文章

  1. HDU 1398 Square Coins
  2. 滑动门和翻转门实现的横竖双tab标签测试页面(附源码)
  3. 计算机和打印机的耗材管理,打印设备耗材余量知多少?多种途径实时掌握
  4. es6 ik分词热更新MySQL_rollup环境搭建(es6转es5、压缩、本地服务器、热更新)
  5. python实现均值滤波_python如何实现均值滤波?
  6. dataframe两个表合并_史上代码最少的工作表拆分,仅需5行,不可思议
  7. 5、计算机图形学——着色与光照模型
  8. 9.QT事件机制源码时序分析(上)
  9. 经典角点检测算法实现
  10. 求非线性方程组的最小二乘解的广义逆法C实现