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最基本的数据类型以及对元组的介绍
Apr 14 Python
Python画图学习入门教程
Jul 01 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
解决python使用list()时总是报错的问题
May 05 Python
用python实现名片管理系统
Jun 18 Python
Python同时处理多个异常的方法
Jul 28 Python
python实现简单的五子棋游戏
Sep 01 Python
python 使用tkinter+you-get实现视频下载器
Nov 17 Python
python实现调用摄像头并拍照发邮箱
Apr 27 Python
Python加密与解密模块hashlib与hmac
Jun 05 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中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
event.srcElement+表格应用
2006/08/29 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
启动targetcli时遇到错误解决办法
2017/10/26 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
python实现二维插值的三维显示
2018/12/17 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Python 元组操作总结
2019/09/18 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
请说出几个常用的异常类
2013/01/08 面试题
食堂员工工作职责
2013/12/18 职场文书
学校元旦晚会方案
2014/02/19 职场文书
会计专业自荐书
2014/07/08 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
投诉信范文
2015/07/02 职场文书
餐馆开业致辞
2015/08/01 职场文书
文明礼仪主题班会
2015/08/13 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python
使用pandas模块实现数据的标准化操作
2021/05/14 Python
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
Python开发五子棋小游戏
2022/05/02 Python