kafka监控获取指定topic的消息总量示例


Posted in Python onDecember 23, 2019

我就废话不多说了,直接 上代码吧!

import kafka.api.PartitionOffsetRequestInfo;
import kafka.common.TopicAndPartition;
import kafka.javaapi.OffsetResponse;
import kafka.javaapi.PartitionMetadata;
import kafka.javaapi.TopicMetadata;
import kafka.javaapi.TopicMetadataRequest;
import kafka.javaapi.consumer.SimpleConsumer;
 
import java.util.*;
import java.util.Map.Entry;
 
public class KafkaOffsetTools {
public final static String KAFKA_TOPIC_NAME_ADAPTER = "sample";
public final static String KAFKA_TOPIC_NAME_EXCEPTION = "exception";
public final static String KAFKA_TOPIC_NAME_AUDIT = "audit";
private static final String rawTopicTotal = "rawTopicTotalRecordCounter";
private static final String avroTopicTotal = "avroTopicTotalRecordCounter";
private static final String exceptionTopicTotal = "exceptionTopicTotalRecordCounter";
 
public KafkaOffsetTools() {
}
 
public static long getLastOffset(SimpleConsumer consumer, String topic,
int partition, long whichTime, String clientName) {
TopicAndPartition topicAndPartition = new TopicAndPartition(topic,
partition);
Map, PartitionOffsetRequestInfo> requestInfo = new HashMap, PartitionOffsetRequestInfo>();
requestInfo.put(topicAndPartition, new PartitionOffsetRequestInfo(
whichTime, 1));
kafka.javaapi.OffsetRequest request = new kafka.javaapi.OffsetRequest(
requestInfo, kafka.api.OffsetRequest.CurrentVersion(),
clientName);
OffsetResponse response = consumer.getOffsetsBefore(request);
 
if (response.hasError()) {
System.err.println("Error fetching data Offset Data the Broker. Reason: " + response.errorCode(topic, partition));
return 0;
}
long[] offsets = response.offsets(topic, partition);
return offsets[0];
}
 
private TreeMap, PartitionMetadata> findLeader(List a_seedBrokers, String a_topic) {
TreeMap, PartitionMetadata> map = new TreeMap, PartitionMetadata>();
loop:
for (String seed : a_seedBrokers) {
SimpleConsumer consumer = null;
try {
String[] hostAndPort;
hostAndPort = seed.split(":");
consumer = new SimpleConsumer(hostAndPort[0], Integer.valueOf(hostAndPort[1]), 100000, 64 * 1024,
"leaderLookup" + new Date().getTime());
List topics = Collections.singletonList(a_topic);
TopicMetadataRequest req = new TopicMetadataRequest(topics);
kafka.javaapi.TopicMetadataResponse resp = consumer.send(req);
 
List metaData = resp.topicsMetadata();
for (TopicMetadata item : metaData) {
for (PartitionMetadata part : item.partitionsMetadata()) {
map.put(part.partitionId(), part);
}
}
} catch (Exception e) {
System.out.println("Error communicating with Broker [" + seed
+ "] to find Leader for [" + a_topic + ", ] Reason: " + e);
} finally {
if (consumer != null)
consumer.close();
}
}
return map;
}
 
public static void main(String[] args) {
String kafkaBrokerList = System.getenv("metadata.broker.list");
if(kafkaBrokerList == null || kafkaBrokerList.length() == 0){
System.err.println("No config kafka metadata.broker.list,it is null .");
//for test
kafkaBrokerList = "localhost:9092,localhost:9093";
System.err.println("Use this broker list for test,metadata.broker.list="+kafkaBrokerList);
}
//init topic,logSize = 0
Map,Integer> topics = new HashMap,Integer>();
topics.put(KAFKA_TOPIC_NAME_ADAPTER,0);
topics.put(KAFKA_TOPIC_NAME_EXCEPTION,0);
topics.put(KAFKA_TOPIC_NAME_AUDIT,0);
//init kafka broker list
String[] kafkaHosts;
kafkaHosts = kafkaBrokerList.split(",");
if (kafkaHosts == null || kafkaHosts.length == 0) {
System.err.println("No config kafka metadata.broker.list,it is null .");
System.exit(1);
}
List seeds = new ArrayList();
for (int i = 0; i < kafkaHosts.length; i++) {
seeds.add(kafkaHosts[i]);
}
 
KafkaOffsetTools kot = new KafkaOffsetTools();
 
for(String topicName : topics.keySet()){
TreeMap, PartitionMetadata> metadatas = kot.findLeader(seeds, topicName);
int logSize = 0;
for (Entry, PartitionMetadata> entry : metadatas.entrySet()) {
int partition = entry.getKey();
String leadBroker = entry.getValue().leader().host();
String clientName = "Client_" + topicName + "_" + partition;
SimpleConsumer consumer = new SimpleConsumer(leadBroker, entry.getValue().leader().port(), 100000,
64 * 1024, clientName);
long readOffset = getLastOffset(consumer, topicName, partition,
kafka.api.OffsetRequest.LatestTime(), clientName);
logSize += readOffset;
if (consumer != null) consumer.close();
}
topics.put(topicName,logSize);
}
System.out.println(topics.toString());
System.out.println(rawTopicTotal+"="+topics.get(KAFKA_TOPIC_NAME_ADAPTER)+" "+System.currentTimeMillis());
System.out.println(avroTopicTotal+"="+topics.get(KAFKA_TOPIC_NAME_AUDIT)+" "+System.currentTimeMillis());
System.out.println(exceptionTopicTotal+"="+topics.get(KAFKA_TOPIC_NAME_EXCEPTION)+" "+System.currentTimeMillis());
}
}

以上这篇kafka监控获取指定topic的消息总量示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
Jun 29 Python
Python使用三种方法实现PCA算法
Dec 12 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 Python
python动态进度条的实现代码
Jul 03 Python
pytorch 共享参数的示例
Aug 17 Python
python3使用print打印带颜色的字符串代码实例
Aug 22 Python
python使用正则来处理各种匹配问题
Dec 22 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
python 使用while循环输出*组成的菱形实例
Apr 12 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
kafka-python 获取topic lag值方式
Dec 23 #Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 #Python
python pyenv多版本管理工具的使用
Dec 23 #Python
Python测试Kafka集群(pykafka)实例
Dec 23 #Python
Python with语句和过程抽取思想
Dec 23 #Python
python每5分钟从kafka中提取数据的例子
Dec 23 #Python
Python彻底删除文件夹及其子文件方式
Dec 23 #Python
You might like
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
php实现微信发红包
2015/12/05 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
小程序实现留言板
2018/11/02 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
MYSQL基础面试题
2012/05/13 面试题
中学实习教师自我鉴定
2013/12/12 职场文书
高中校园广播稿
2014/01/11 职场文书
会计自荐信范文
2014/03/09 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
父亲节感言
2015/08/03 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
Mysql中常用的join连接方式
2022/05/11 MySQL