Kafka 流量监控的原理及实现

栏目: 后端 · 发布时间: 6年前

内容简介:作为一个优秀的开发人员,项目开发的过程中监控告警系统的可靠性是可以体现出一个人的工程管理能力的。优秀的监控告警系统可以免去很多精力消耗,比如维护,故障预判,故障及时准确通知可以想像项目上线后,假如没有监控告警系统,这么一个暗箱是多么可怕。

工程能力

作为一个优秀的开发人员,项目开发的过程中监控告警系统的可靠性是可以体现出一个人的工程管理能力的。优秀的监控告警系统可以免去很多精力消耗,比如维护,故障预判,故障及时准确通知 ,故障定位排查等

可以想像项目上线后,假如没有监控告警系统,这么一个暗箱是多么可怕。

对于大数据项目, 数据一般需要先入消息队列,如kafka,然后分离线和实时将数据进行解耦分流,用于实时处理和离线处理。消息队列存在的好处:

  • 消息队列的订阅者可以根据需要随时扩展,可以很好的扩展数据的使用者。

  • 消息队列的横向扩展,增加吞吐量,做起来还是很简单的。这个用传统数据库,分库分表还是很麻烦的。

  • 由于消息队列的存在,也可以帮助我们抗高峰,避免高峰时期后端处理压力过大导致整个业务处理宕机。

kafka在大数据项目中作用至关重要,那么对其的监控告警就至关重要了,我们这里主要是讲针对kafka流量的监控告警,其目的也是很明显的便于我们了解数据的整体情况及波动情况,以调整处理后端,如spark streaming,flume等。

kafka 监控 工具 很多,常见的有kafka manager, KafkaOffsetMonitor,kafka eagle,kafka tools等,浪尖最经常使用的是kafka manager,也建议大家使用该工具,其不仅有监控功能还有管理功能。具体使用方法可以参看:

kafka管理神器-kafkamanager

监控指标

kafka 的指标服务器和客户端都有的。具体指标内容,可以参看 kafka 官网:

http://kafka.apache.org/0102/documentation.html#monitoring

查看可用指标的最简单方法是启动 jconsole 并将其指向正在运行的 kafka 客户端或服务器这将允许使用 JMX 浏览所有指标。

对于熟悉 kafka manager 的朋友都应该看过 broker 相关信息,比如每秒钟的流入的消息条数,每秒钟的流入的消息大小,流出的消息大小等。

使用kafka manager 可以很方便的查看。但是,这其实不能让我们及时的发现数据流量波动,或者说我们想画个曲线的详细对比历史流量,它是做不到的。所以,我们要想办法去获取出来这些指标,然后做我们自己的展示。还有一点就是,流量波动告警。

浪尖这里只做了图中几个指标的接口:

def getBytesInPerSec(kafkaVersion: KafkaVersion, mbsc: MBeanServerConnection, topicOption: Option[String] = None) = {
    getBrokerTopicMeterMetrics(kafkaVersion, mbsc, "BytesInPerSec", topicOption)
  }

  def getBytesOutPerSec(kafkaVersion: KafkaVersion, mbsc: MBeanServerConnection, topicOption: Option[String] = None) = {
    getBrokerTopicMeterMetrics(kafkaVersion, mbsc, "BytesOutPerSec", topicOption)
  }

  def getBytesRejectedPerSec(kafkaVersion: KafkaVersion, mbsc: MBeanServerConnection, topicOption: Option[String] = None) = {
    getBrokerTopicMeterMetrics(kafkaVersion, mbsc, "BytesRejectedPerSec", topicOption)
  }

  def getFailedFetchRequestsPerSec(kafkaVersion: KafkaVersion, mbsc: MBeanServerConnection, topicOption: Option[String] = None) = {
    getBrokerTopicMeterMetrics(kafkaVersion, mbsc, "FailedFetchRequestsPerSec", topicOption)
  }

  def getFailedProduceRequestsPerSec(kafkaVersion: KafkaVersion, mbsc: MBeanServerConnection, topicOption: Option[String] = None) = {
    getBrokerTopicMeterMetrics(kafkaVersion, mbsc, "FailedProduceRequestsPerSec", topicOption)
  }

  def getMessagesInPerSec(kafkaVersion: KafkaVersion, mbsc: MBeanServerConnection, topicOption: Option[String] = None) = {
    getBrokerTopicMeterMetrics(kafkaVersion, mbsc, "MessagesInPerSec", topicOption)
  }

jmx 客户端

连接 jmx server 是可以使用 jconsole ,但是满足不了我们的需求。所以,我们使用 JMXConnectorFactory 方式连接 jmx 。使用 JMXConnectorFactory 链接 jmx 时, JMXServiceURL 的参数 url 必须使用 service:jmx 方式进行连接,具体链接创建方式很简单,几行代码而已,如下:

val jmxHost =

"hostname"

val jmxPort =

9999

val urlString = s"service:jmx:rmi:///jndi/rmi:// $ jmxHost : $ jmxPort

/jmxrmi"

val url = new

JMXServiceURL(urlString)

val

jmxc = JMXConnectorFactory. connect (url )

val mbsc = jmxc.getMBeanServerConnection

;

println (KafkaMetrics. getMessagesInPerSec (Kafka_0_10_2_1 , mbsc , Some ( "test"

)).fifteenMinuteRate)

jmxc.close()

开启 kafka jmx 端口

kafka jmx 服务默认时关闭的,开启的话很简单,只需要在 kafka server 的启动脚本 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

测试

我这里测试就比较简单了,主要是将消息条数打出来,大家可以根据需要自行调整,比如均值大于阈值发短信告警等。

Kafka 流量监控的原理及实现

本文是自己实现kafka 监控系统的第二篇文章,前面有篇文章讲到了从kafka broker获取消费者已经提交的offset,具体可以阅读:

如何获取kafka的broker保存的消费者信息?

一套完整的kafka监控,包括:

  1. 消费者监控,主要是存活告警,消费滞后告警。

  2. 生产者监控,主要是存活告警,生产者消费上游数据能力告警。

  3. broker监控,主要是存活告警,流量告警,isr列表,topic异常告警,control变换告警。

内容颇多,后面陆续出文章实现,当然整个项目最终会放到星球里的。

本文源码,关注本公众号(bigdatatip),输入 1027 获取。

微信技术交流群,扫描微信二维码,拉入群聊,也可以搜索微信 158570986。

Spark SQL从入门到精通

最常见的Kafka面试题及答案

Flume NG:Flume 发展史上的第一次革命

更多干货加入浪尖知识星球,179价格最后一天,明天开始199.

Kafka 流量监控的原理及实现

微信交流群,可以扫浪尖微信。

Kafka 流量监控的原理及实现


以上所述就是小编给大家介绍的《Kafka 流量监控的原理及实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

100个可操作的网络赚钱方法

100个可操作的网络赚钱方法

陶秋丰 / 云南科技 / 2009-12 / 29.80元

《100个可操作的网络赚钱方法》专为有志于网上创业的读者量身打造,作者是“实战型”的网赚高手,在17岁时就通过互联网创业“年人10万”,如今结合自身的亲身实战经验,与大家分享可以实实在在盈利的100个网络赚钱方法和技巧。内容包括:网站创建与推广、竞价广告、联盟赚钱、网站SEO优化、域名投资、广告投放盈利、威客、博客、淘客赚钱等多个方面。 本手册中作者结合自身的网络赚钱经历,通过具体的、可操作......一起来看看 《100个可操作的网络赚钱方法》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具