Kafka(三) —— 集群监控
任何应用功能再强大、性能再优越,如果没有与之匹配的监控,那么一切都是虚无缥缈的。监控不仅可以为应用提供运行时的数据作为依据参考,还可以迅速定位问题,提供预防及告警等功能,很大程度上增强了整体服务的鲁棒性。
一、Kafka监控指标与获取
Kafka监控的4个维度:
- 集群信息
- broker信息
- topic信息
- consumer group信息
使用JConsole访问JMX
(1)终端输入jconsole,启动Java监视和管理控制台。
(2)修改kafka-run-class.sh,使JConsole可以通过远程连接。
KAFKA_JMX_OPTS="
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=false  
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=服务器的IP地址或者域名"
(3)修改kafka-server-start.sh,增加export JMX_PORT="9999"
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
    export JMX_PORT="9999"
fi
(4)检查是否开启JMX
broker在启动过程中,始终会将JMX端口信息写入Kafka对应的位置.

(5)连接

(6)查看MBean

MBean的名称,xxx.type=yyy,{attr} = zzz
其中xxx指的是组件名,如xxx = kafka.server
zzz 和 attr 指的是MBean的范围,例如topic = test,表示该MBean的作用范围是名为test的topic。
指标分类:
- kafka.server 服务器端JMX指标
- kafka.network 网络相关JMX指标
- kafka.log 分区日志相关JMX指标
- kafka.controller controller相关指标
使用Java程序访问JMX
(1)监控broker一分钟消息流入的速度
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
OneMinuteRate 表示某个broker一分钟消息流入的速度(messages/s)。

public class KafkaJmxDemo {
    private MBeanServerConnection conn;
    private String jmxUrl;
    private String ipAndPort;
    public KafkaJmxDemo(String ipAndPort) {
        this.ipAndPort = ipAndPort;
    }
    /**
     * 初始化JMX连接
     *
     * @return
     */
    public boolean init() {
        jmxUrl = "service:jmx:rmi:///jndi/rmi://" + ipAndPort + "/jmxrmi";
        try {
            JMXServiceURL serviceURL = new JMXServiceURL(jmxUrl);
            JMXConnector connector = JMXConnectorFactory.connect(serviceURL, null);
            conn = connector.getMBeanServerConnection();
            if (conn == null) {
                return false;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }
    public double getMsgInPerSec() {
        String objectName = "kafka.server:type=BrokerTopicMetrics," +
                "name=MessagesInPerSec";
        Object val = getAttribute(objectName, "OneMinuteRate");
        if (val != null) {
            return (double) (Double) val;
        }
        return 0.0;
    }
    private Object getAttribute(String objName, String objAttr) {
        ObjectName objectName;
        try {
            objectName = new ObjectName(objName);
            return conn.getAttribute(objectName, objAttr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void main(String[] args) {
        KafkaJmxDemo kafkaJmxDemo = new KafkaJmxDemo("127.0.0.1:9999");
        kafkaJmxDemo.init();
        System.out.println(kafkaJmxDemo.getMsgInPerSec());
    }
}
(2)获取指定Topic、指定分区的LEO值

    public long getTopicPatitionLeo(String topic, int partition) {
        String objectName = "kafka.log:type=Log,name=LogEndOffset,topic=" + topic + ",partition=" + partition;
        Object val = getAttribute(objectName, "Value");
        if (val != null) {
            return (long) (Long) val;
        }
        return 0L;
    }
(3)监控指定Topic的消息流入的速度

public double getBrokerTopicMetrics(String topic) {
        String objectName = "kafka.server:type=BrokerTopicMetrics," +
                "name=BytesInPerSec,topic=" + topic;
        Object val = getAttribute(objectName, "OneMinuteRate");
        if (val != null) {
            return (double) (Double) val;
        }
        return 0.0;
    }
输出

Kafka重要监控参数
(1)消息入站、出站速率
## 入站速率
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec
## 出站速率
kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec
| 属性名 | 含义 | 
|---|---|
| Count | broker处理过的总消息字节数 | 
| OneMinuteRate | 统计过去1分钟内的消息速率 | 
| MeanRate | 统计平均消息速率 | 
二、监控系统kafka-manager
注意每一行后面不要留空格。
[repositories]
local
aliyun: http://maven.aliyun.com/nexus/content/groups/public/
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
maven-central
sonatype-oss-snapshots
Add Cluster时,会提示异常。
Yikes! Ask timed out on [ActorSelection[Anchor(akka://kafka-manager-system/), Path(/user/kafka-manager)]] after [5000 ms]. Message of type [kafka.manager.model.ActorModel$KMAddCluster]. A typical reason for `AskTimeoutException` is that the recipient actor didn't send a reply.

三、监控系统kafka-eagle
安装参考
官方参考文档:https://docs.kafka-eagle.org/
https://www.cnblogs.com/yinzhengjie/p/9957389.html
下载
wget https://github.com/smartloli/kafka-eagle-bin/archive/v1.2.0.tar.gz
效果图


创建Topic

监控Broker的消息出入站速率


参考文档
kafka-manager Github
Kafka集群管理工具kafka-manager的安装使用
kafka manager的使用,kafka manager页面参数说明
Kafka Manager几个指标含义
Kafka(三) —— 集群监控的更多相关文章
- Spring Cloud :断路器集群监控(Turbine)
		一. 简介 上一篇文章我们已经实现了对单个服务实例的监控,当然在实际应用中,单个实例的监控数据没有多大的价值,我们更需要的是一个集群系统的监控信息,这时我们就需要引入Turbine.Turb ... 
- kafka集群监控之kafka-manager部署(kafka-manager的进程为:ProdServerStart)
		kafka集群监控之kafka-manager部署(ProdServerStart) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 雅虎官网GitHub项目:https://git ... 
- 断路器Hystrix与Turbine集群监控-Spring Cloud学习第三天(非原创)
		文章大纲 一.Hystrix基础介绍二.断路器Hystrix简单使用三.自定义Hystrix请求命令四.Hystrix的服务降级与异常处理五.Hystrix的请求缓存与请求合并六.Hystrix仪表盘 ... 
- vivo 容器集群监控系统架构与实践
		vivo 互联网服务器团队-YuanPeng 一.概述 从容器技术的推广以及 Kubernetes成为容器调度管理领域的事实标准开始,云原生的理念和技术架构体系逐渐在生产环境中得到了越来越广泛的应用实 ... 
- 改造断路器集群监控Hystrix Turbine实现自动注册消费者、实时监控多个服务
		在上一篇文章中,我们搭建了Hystrix Dashoard,对指定接口进行监控.但是只能对一个接口进行监听,功能比较局限: Turbine:汇总系统内多个服务的数据并显示到 Hystrix Dashb ... 
- kafka+zookeeper集群
		参考: kafka中文文档 快速搭建kafka+zookeeper高可用集群 kafka+zookeeper集群搭建 kafka+zookeeper集群部署 kafka集群部署 kafk ... 
- 理解OpenShift(7):基于 Prometheus 的集群监控
		理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ... 
- MongoDB高可用集群+MMS集群监控搭建
		备注: mongodb学习资料 http://www.runoob.com/mongodb/mongodb-tutorial.html 一. 集群的三个组件: mongos(query routers ... 
- 完美集群监控组合ganglia和nagios
		Ganglia是伯克利开发的一个集群监控软件.可以监视和显示集群中的节点的各种状态信息,比如如:cpu .mem.硬盘利用率, I/O负载.网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈 ... 
- Turbine——Hystrix集群监控
		上一篇文章讲述了如何利用Hystrix Dashboard去监控断路器的Hystrix command.当我们有很多个服务的时候,这就需要聚合所有服务的Hystrix Dashboard的数据了.这就 ... 
随机推荐
- Java 之 方法引用
			方法引用 一.冗余的Lambda场景 来看一个简单的函数式接口以应用Lambda表达式: @FunctionalInterface public interface Printable { void ... 
- Appscan漏洞之跨站点请求伪造(CSRF)
			公司前段时间使用了Fortify扫描项目代码,在修复完这些Fortify漏洞后,最近又启用了Appscan对项目代码进行漏洞扫描,同样也是安排了本人对这些漏洞进行修复.现在,针对修复过的Appscan ... 
- iOS 简化冗余代码
			正在给深圳某家智能家居开发iPad版本,在已经存在的iPhone版上修改,该app的界面采用的是xib.xib相比代码来写界面,快速高效,但是可维护性和可读性太差.言归正传,看到这些代码后,我的心情很 ... 
- Redis除了做缓存--Redis做消息队列/Redis做分布式锁/Redis做接口限流
			1.用Redis实现消息队列 用命令lpush入队,rpop出队 Long size = jedis.lpush("QueueName", message);//返回存放的数据条数 ... 
- 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
			Jerry在之前的文章多次提过,SAP Cloud Platform ABAP编程环境上的ABAP语法,只是广大SAP顾问们在On-Premises环境上使用的ABAP的一个子集.换句话说,On-Pr ... 
- Discuz!数据库操作DB类和C::t类介绍
			类定义文件 DB类: 文件\source\class\class_core.php class DB extends discuz_database {} discuz_database类定义 文件\ ... 
- sql写法,子节点名称拼接上级节点名称
			with T(id,[name],pid) as(select 1,N'中国',-1 union allselect 2,N'山东',1 union allselect 3,N'济南',2 union ... 
- windows+phpstudy(apache) 以cgi方式运行python
			Apache配置 在httpd.conf中查找DocumentRoot: +ExecCGI 支持cgi DocumentRoot "F:\phpStud\PHPTutorial\WWW&qu ... 
- 常见EMC疑问及对策
			1. 在电磁兼容领域,为什么总是用分贝(dB)的单位描述?10mV是多少dBmV? 答:因为要描述的幅度和频率范围都很宽,在图形上用对数坐标更容易表示,而dB就是用对数表示时的单位,10mV是20dB ... 
- 彻底终结MySQL同步延迟问题
			作为一名DBA,在工作中会经常遇到一些MySQL主从同步延迟的问题,这些同步慢的问题,其实原因非常多,可能是因为主从的网络问题导致,可能是因为网络带宽问题导致,可能是因为大事务导致,也可能是因为单线程 ... 
