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 相关文章推荐
《Python之禅》中对于Python编程过程中的一些建议
Apr 03 Python
python实现马耳可夫链算法实例分析
May 20 Python
python破解zip加密文件的方法
May 31 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
从请求到响应过程中django都做了哪些处理
Aug 01 Python
使用Scrapy爬取动态数据
Oct 21 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
python入门之井字棋小游戏
Mar 05 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
python实现黄金分割法的示例代码
Apr 28 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
PHP parse_url 一个好用的函数
2009/10/03 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
javascript操作referer详细解析
2014/03/10 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
javascript实用方法总结
2015/02/06 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
python中List的sort方法指南
2014/09/01 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
Python单例模式实例详解
2017/03/01 Python
vscode 远程调试python的方法
2017/12/01 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
学习十八大报告感言
2014/02/04 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
南极大冒险观后感
2015/06/05 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书