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实现文件按照日期命名的方法
Jul 09 Python
使用Python的turtle模块画图的方法
Nov 15 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
详解python多线程之间的同步(一)
Apr 03 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
python3 线性回归验证方法
Jul 09 Python
python3实现mysql导出excel的方法
Jul 31 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
python处理excel绘制雷达图
Oct 18 Python
python将时分秒转换成秒的实例
Dec 07 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
TensorFlow Autodiff自动微分详解
Jul 06 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判断所处服务器操作系统的类型
2013/06/20 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
Python常用库推荐
2016/12/04 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
简单了解Python中的几种函数
2017/11/03 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
Python 创建TCP服务器的方法
2020/07/28 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
纯css3实现照片墙效果
2014/12/26 HTML / CSS
普通话宣传标语
2014/06/26 职场文书
联片教研活动总结
2014/07/01 职场文书
高中学生自我评价范文
2014/09/23 职场文书
婚前保证书范文
2015/02/28 职场文书
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL