kafka是分布式架构里重要成员,常用于异步处理、应用解耦、流量消峰、日志采集。开发人员十之八九只会用(更有甚者只知用SpringKafka,不解Kafka Client API),不知其法,亦不愿探其法,其结局就是出了问题,抓耳挠腮,忍丢失数据之痛而重启大吉。

本文将从基础理论,案例实验,专家学者三个角度探究kafka的监控运维,提供一个kafka知识地图,力求让工程师敢用kafka,会用kafka,能控kafka。初,理论先行,后,实践之,再后,研究生产案例,以求学、练、用、思、总,以达到很好的学习效果,将知识为自己所用,为公司创利润,为行业定标准,为社会谋福利。

一、基础理论

监控架构

Kafka 的监控架构主要分为数据采集、数据存储和数据展示这 3 个部分。

数据采集主要指从各个数据源采集监控数据并做一些必要的运算,然后发送给数据存储模块进行存储。数据源可以是 Kafka 配套的 ZooKeeper、Kafka 自身提供的内部运行指标(通过 JMX 获取)、Kafka内部的一些数据(比如__consumer_offset 中存储的信息,通过 Kafka 自定义协议获取)、Falcon/Zabbix等第三方工具(或者其他类似的工具,主要用来监控集群的硬件指标)。

数据存储可以采用OpenTSDB之类的基于时间序列的数据库,方便做一些聚合计算,也可以附加采用Redis、MySQL等存储特定数据。

数据展示是将经过预处理的、存储的数据展示到监控页面上,以便提供丰富的UI给用户使用。可以使用Grafana作为数据展示面板。

监控指标

从监控维度来看,Kafka可以分为集群信息、broker信息、主题信息和消费组信息四个方面。

1、Kafka主机监控指标

主机监控是监控Kafka集群Broker所在的节点机器的性能。常见的主机监控指标包括:

(1)机器负载(Load)

(2)CPU使用率

(3)内存使用率,包括空闲内存(Free Memory)和已使用内存(Used Memory)

(4)磁盘I/O使用率,包括读使用率和写使用率网络

(5)I/O使用率

(6)TCP连接数

(7)打开文件数

(8)inode使用情况

2、集群监控指标

(1)集群总消息流入/流出数量。

(2)版本信息。

(3)集群地址。

(4)leader节点选举切换次数。

(5)集群再平衡次数。

3、broker监控指标

(1)查看Broker进程是否启动,端口是否建立。在容器化的Kafka环境中,使用Docker启动Kafka Broker时,Docker容器虽然成功启动,但网络设置如果配置有误,就可能会出现进程已经启动但端口未成功建立监听的情形。

(2)查看Broker端关键日志。Broker端服务器日志server.log,控制器日志controller.log以及主题分区状态变更日志state-change.log。

(3)查看Broker端关键线程的运行状态。Kafka Broker进程会启动十几个甚至是几十个线程。在实际生产环境中,Log Compaction线程是以kafka-log-cleaner-thread开头的,负责日志Compaction;副本拉取消息的线程,通常以ReplicaFetcherThread开头,负责执行Follower副本向Leader副本拉取消息的逻辑。

(4)查看Broker端的关键JMX指标。

BytesIn/BytesOut:即Broker端每秒入站和出站字节数,如果值接近网络带宽,很容易出现网络丢包的情形。

NetworkProcessorAvgIdlePercent:即网络线程池线程平均的空闲比例,通常需要确保其值长期大于30%。如果小于30%,表明网络线程池非常繁忙,需要通过增加网络线程数或将负载转移给其它服务器的方式,来给Broker减负。

RequestHandlerAvgIdlePercent:即I/O线程池线程平均的空闲比例。如果值长期小于30%,需要调整I/O线程池的数量或者减少 Broker端的负载。

UnderReplicatedPartitions:即未充分备份的分区数。所谓未充分备份,是指并非所有的Follower副本都和Leader副本保持同步。

ISRShrink/ISRExpand:即ISR收缩和扩容的频次指标。如果生产环境中出现ISR中副本频繁进出的情形,其值一定是很高的。需要诊断下副本频繁进出ISR的原因,并采取适当的措施。

ActiveControllerCount:即当前处于激活状态的控制器的数量。通常,Controller所在Broker上的ActiveControllerCount指标值是1,其它Broker上的值是 0。如果发现存在多台Broker上ActiveControllerCount值都是1,表明Kafka集群出现了脑裂,必须尽快处理,处理方式主要是查看网络连通性。脑裂问题是非常严重的分布式故障,Kafka目前依托ZooKeeper来防止脑裂,一旦出现脑裂,Kafka无法保证正常工作。新版本会移除对zookeeper的依赖。

其他监控指标可以使用JConsole连接到kafka集群查看各Mbean。

(5)监控Kafka客户端。客户端所在的机器与Kafka Broker机器之间的网络往返时延(Round-Trip Time,RTT)。对于生产者,以kafka-producer-network-thread开头的线程负责实际消息发送,一旦挂掉,Producer将无法正常工作,但Producer进程不会自动挂掉。对于消费者,以kafka-coordinator-heartbeat-thread 开头的心跳线程事关Rebalance。

从Producer角度,需要关注的JMX指标是request-latency,即消息生产请求的延时,最直接地表征Producer程序的TPS;

从 Consumer角度,records-lag和records-lead是两个重要的JMX 指标。如果使用Consumer Group,需要关注join rate和sync rate指标,其表明Rebalance的频繁程度。

4、消费分组监控指标

(1)消息消费偏移量。

(2)消息堆积数量。

(3)topic集合。

(4)性能指标趋势。

监控工具

(1)Kafka Manager:雅虎公司2015年开源的kafka监控框架,使用scala编写。
(2)Kafka Eagle:实现broker级常见的jmx监控,可以对consumer消费进度进行监控,可以web对多个集群进行管理。安装简单(二进制包解压即用), 可以配置告警(钉钉、微信、email均可),需要数据库(mysql或sqlite)。
(3)Kafka Monitor:linkin开源的kafka监控框架。
(4)Kafka Offset Monitor:如果场景是偏重集群管理,则不要选择。已不再维护。
(5)Kafka Web Console:实现brokers、topic列表等监控,展示生产和消费流量图。存在bug,会与生产者、消费者和zookeeper建立大量的连接,导致网络阻塞。
(6)JmxTool:并不是一个框架,而是Kafka默认提供的一个工具,用于实时查看JMX监控指标。结合Influxdb和Grafana使用。比较繁琐。
(7)Cruise-control:linkin于2017年8月开源了cruise-control框架,用于监控大规模集群,包括一系列的运维功能,据称在linkedin有着两万多台的kafka集群,项目还在持续更新中。
(8)Doctorkafka:DoctorKafka是Pinterest 开源 Kafka 集群自愈和工作负载均衡工具。
(9)Pinterest 是一个进行图片分享的社交站点。他们使用 Kafka 作为中心化的消息传输工具,用于数据摄取、流处理等场景。随着用户数量的增加,Kafka 集群也越来越庞大,对它的管理日趋复杂,并变成了运维团队的沉重负担,因此他们研发了 Kafka 集群自愈和工作负载均衡工具 DoctorKafka,最近他们已经在 GitHub 上将该项目开源。
(10)Burrow:Burrow是LinkedIn开源的一款专门监控consumer lag的框架。使用Burrow监控kafka, 不需要预先设置lag的阈值, 他完全是基于消费过程的动态评估,Burrow支持读取kafka topic和,zookeeper两种方式的offset,对于新老版本kafka都可以很好支持。Burrow支持http, email类型的报警。Burrow默认只提供HTTP接口(HTTP endpoint),数据为json格式,没有web UI。
(11)kafkat:命令行方式监控Kafka brokers。
(12)capillary:提供web站点展示storm的拓扑图。
(13)chaperone:Uber开源的kafka数据管道。提供消息审计功能,检测消息是否丢失。

二、案例实验

1、producer和consumer会报如下异常:LeaderNotAvailableException

原因分析:其中该分区所在的broker挂了,如果是多副本,该分区所在broker恰好为leader。

2、partition的leader为-1情况分析

原因分析:一种是broker关闭的时候,分区的leader在此broker,controller选主未成功,移除该broker后,对于分区的leader被设置为-1。另一种,给此broker发送stopReplicaRequest,。调用controller.removeReplicaFromIsr,从zk读取当前partition的状态,从isr中移除此broker,并更新zk信息(如果leader为此broker,则新leader被置为-1,代表没有leader。

3、偏移量(offset)越界,将会收到OffsetOutOfRange错误回复

原因分析:指定消费的偏移量越界时,consumer根据auto.offset.reset配置参数自动把偏移量重置为最小有效偏移量(the earliest valid offset)或者最新有效偏移量(the latest valid offset)。这种偏移量的重置为最小偏移量会引起重复消费数据;重置为最新偏移量意味着有丢失消息数据的潜在可能。

4、消息输出量非常大,而相应的输入量并未增加

原因分析:可能是Kafka跨集群同步,延迟监控上出现“毛刺”。

5、多系统集成时,相关联系统IP或端口或网络环境有变化

6、消息积压,磁盘撑爆。

7、kafka卡顿,可以看看topic请求量是否过大,而partition过小,导致吞吐量下降。尝试将partition改大之后,看看能不能恢复正常

8、kafka生产者数据丢失,确认网络负载是否过高或磁盘负载是否过高,可以试试配置:

props.put("compression.type", "gzip");   发送的数据会压缩
props.put("linger.ms", "50");  一个Batch批量发送的时间阈值,最大这个时间就会发送Batch
props.put("acks", "all");
props.put("retries ", 30);
props.put("reconnect.backoff.ms ", 20000);
props.put("retry.backoff.ms", 20000);

三、专家学者

1、朱忠华。著有 《深入理解kafka:核心设计与实践原理》。

简介:计算机硕士毕业,在互联网公司担任高级开发工程师,从事消息中间件的研究及开发,主要包括RabbitMQ和Kafka

2、牟大恩。著有《Kafka入门与实践》。

简介:武汉大学硕士,曾先后在网易杭州研究院、掌门科技、优酷土豆集团担任高级开发工程师和资深开发工程师职务,目前就职于海通证券总部。有多年的Java开发及系统设计经验,专注于互联网金融及大数据应用相关领域。

3、邓杰。著有 《Kafka并不难学!入门、进阶、商业实战》。

简介:资深大数据全栈开发者,极客学院讲师,开源爱好者,博客园博主。

开发了Kafka系统监控管理工具——Kafka Eagle,将其发布在Github上,深受业界开发者赞誉。

作为极客学院特邀讲师期间,制作了多个技术视频,讲授Hadoop技术、Kafka技术等课程,广受学员好评。

4、Neha Narkhede、Gwen Shapira 和 Todd Palino(O'Reilly)。著有 《Kafka 权威指南》。

简介: Neha Narkhede, Confluent联合创始人、CTO,曾在LinkedIn主导基于Kafka和Apache Samza构建流式基础设施,是Kafka作者之一。

Gwen Shapira, Confluent系统架构师,帮助客户构建基于Kafka的系统,在可伸缩数据架构方面拥有十余年经验;曾任Cloudera公司解决方案架构师。另著有《Hadoop应用架构》。

Todd Palino, LinkedIn主任级SRE,负责部署管理大型的Kafka、Zookeeper和Samza集群。

5、薛命灯。毕业于厦门大学软件学院,十余年软件开发和架构经验,InfoQ社区编辑。译有《硅谷革命》《生产微服务》等书。微信公众号CodeDeep。

授人以鱼不如授人以渔,以上提供了一些思路和案例,以及渠道,供阅。

你家kafka正常运行着吗相关推荐

  1. Kafka原理和实践--云平台技术栈13

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的Kafka! 作者:阿龙 cnblogs.com/along21/p/10278100.htm 1.认识 Kafka 1.1 Ka ...

  2. kafka 、 zookeeper 集群(一)

    一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同 ...

  3. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建

    为什么80%的码农都做不了架构师?>>>    kafka入门:简介.使用场景.设计原理.主要配置及集群搭建(转) 问题导读: 1.zookeeper在kafka的作用是什么? 2. ...

  4. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建--转载

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...

  5. 超详细 kafka 入门(最佳实践)

    今日推荐6年,终拿腾讯 offer! 都2021年了,你还在用Jenkins?赶快看看这些替代方案吧! 盘点 12 个 GitHub 上的高仿项目 CTO 说了,用错 @Autowired 和 @Re ...

  6. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...

  7. 超详细讲解,带你零基础入门 kafka!

    作者:alonghub cnblogs.com/along21/p/10278100.html 认识 kafka kafka简介 Kafka 是一个分布式流媒体平台,kafka官网:http://ka ...

  8. kafka的消费顺序_Kafka原理和实践云平台技术栈13

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的Kafka! 作者:阿龙 cnblogs.com/along21/p/10278100.htm 1.认识 Kafka 1.1 Ka ...

  9. Kafka安装以及验证

    文章目录 1 Kafka安装 1.1 下载安装 1.2 配置启动zookeeper 1.3 配置kafka 1.3.1 修改配置文件 1.3.2 配置环境变量 1.3.3 配置服务启动脚本 1.3.4 ...

  10. 分布式发布订阅消息系统—Apache Kafka

    1.什么是Kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键 ...

最新文章

  1. JavaScript + Tampermonkey——易班优课YOOC课群在线测试自动答题解决方案(十七)复合型解决方案油猴脚本
  2. [SecureCRT]通过SFTP方式上传本地文件到服务器
  3. 各种流行深度学习构架的性能对比
  4. 太爽了!宅男醒来后,发现自己变成了……
  5. TraceView 使用详解 android eclipse
  6. QWidget 设置背景图片
  7. Linux下动态库(.so)和静态库(.a) 的区别
  8. Win 10 没有 Hyper-V 解决方案
  9. 计算分词的Tf-idf值
  10. [C++]2-3 倒三角形
  11. Citrix Xendesktop虚拟化桌面和深信服VSP安全桌面的技术对比
  12. 全员系统的服务器地址,江西省全员人口信息系统登录(全员系统查询)
  13. 下载UltraEdit UE 破解版方法
  14. 仪表盘故障图像识别_一目了然:汽车仪表盘上指示、警示、故障图标全解
  15. kindle 新手入门
  16. C#软件注册与注册机
  17. 在 Flutter 中创建一个动画屏幕
  18. 使用yaml文件指定 kata 安全容器配置相关参数
  19. 使用VSccde上传文件到Git时可能出现的情况
  20. vue控件a-date-picker设置默认值的方式以及注意事项

热门文章

  1. 用python定时发送邮件
  2. 解决华为手机Android系统10.0不能隐藏桌面图标问题,全网唯一
  3. 做IT民工还是IT精英?
  4. anaconda出现Multiple Errors Encountered.
  5. 2014年东北四省赛总结
  6. 传感器实验——火焰传感器
  7. 《一个广告人的自白》读书笔记
  8. RadioButton下划线效果的使用
  9. LabVIEW程序框图进行缩放
  10. 手把手教你写 Word 版本PRD