免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

以小见大,从 Kafka Monitor 源码解读看如何做好黑盒监控

  • 2019-08-23
  • 本文字数:2608 字

    阅读完需:约 9 分钟

以小见大,从Kafka Monitor源码解读看如何做好黑盒监控

众所周知,监控分为黑盒和白盒监控,黑盒监控是通过模拟外部用户对其可见的系统功能进行监控的一种监控方式。作为监控的重要一环,黑盒监控提供了让系统或者服务在发生故障时能够快速通知相关人员的能力。


通常情况下白盒监控的数据来自服务或系统自身(例如 CPU 负载、堆栈信息、连接数······),所以易于采集。而相对而言,黑盒监控的数据通常来自系统和服务外部,需要我们自己开发相关功能监控模块来完成采集。那么,黑盒监控如何做?如何才能在及时发现服务故障的同时不会引起其它问题?


本文将分享京东云在 Kafka 黑盒监控方面的一些实践经验,其中着重对 Kafka Monitor 监控逻辑的部分代码进行解读,以便大家能够对其优秀的设计有一个更为深入的了解。然后再结合我们在其它服务中的黑盒监控实践,来试图回答上面提出的问题。

Kafka Monitor 介绍

Kafka Monitor 是由 Linkedin 开源的一款非常优秀的针对 Kafka 的黑盒监控软件。它通过模拟客户端行为,生产和消费数据并采集消息的延迟、错误率和重复率等性能和可用性指标,来达到黑盒监控的目的。

Kafka 的主要概念

在介绍 Kafka Monitor 功能监控之前,我们先了解下 Kafka 的几个主要概念:


  • Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker

  • Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic。物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 的消息虽然保存于一个或多个 broker 上,但用户只需指定消息的 Topic 即可生产或消费数据而不必关心数据存于何处

  • Partition:Partition 是物理上的概念,每个 Topic 包含一个或多个 Partition

  • Producer:消息生产者,负责发布消息到 Kafka broker 的客户端

  • Consumer:消息消费者,读取 Kafka broker 消息的客户端

  • Consumer Group:消费者组,每个 Consumer 属于一个特定的 Consumer Group



图 1 Kafka 架构图

Kafka Monitor 模块组成

1.kafka Monitor 由以下五个服务组成


  • Jetty Service:提供用于 Web UI 展示的 HTTP 服务

  • Jolokia Service:提供 JMX 的 HTTP 接口

  • Produce Service: 生产者服务,汇报生产速率和生产可用性

  • Consumer Service: 消费者服务,汇报消费速率和可用性、消息的延迟、丢失率和重复率

  • Metrics Service:接受 Produce Service 和 Consumer Service 汇报的监控指标


2.各服务之间的结构图如下



图 2 Kafka monitor 结构图

监控工作流程及代码解读

1.Producer Service 启动后以一定的时间为周期(配置项:produce.record.delay.ms,默认值:100ms)生产数据。


需要注意的是,Producer Service 会为每个 Partition 启动一个单独的生产任务,目的是为了让每个周期内生产的数据能够覆盖到所有 Partition 上。



图 3 Producer Service 代码解读


  1. 每条消息由以下内容组成:


  • 消息序列号,用于在消费时检查消息是否丢失或重复

  • 时间戳,用于计算消息从生产到消费的时延

  • 消息的大小,用于指定序列化后的数据大小(配置项:produce.record.size.byte,默认值:100 byte)

  • Topic 和 Producer ID,用于确保消费到的数据是来自同一 Topic 和 Producer


每条消息序列化后提交到 Kafka 的指定 Topic 上,然后通过_sensors 对象汇报失败或成功状态



图 4 Producer Service 代码解读 2


3.Consumer Service 从指定 Topic 消费读取消息,每条消息经过反序列化和校验后,计算出消息的延迟、错误或重复等监控指标,通过_sensors 对象汇报到 Metrics Service。



图 5 Consumer Service 代码解读

Kakfa Monitor 优势总结

1.通过为每个 Partition 启动单独的生产任务,确保监控覆盖所有 Partition。


这里需要注意的一点是:Kafka Monitor 仅能够保证监控覆盖所有 Partition,但不能保证覆盖所有 Broker。所以,为保证监控覆盖所有 Broker,利用 Kafka 对 Partition 在 Broker 的均衡分配原则,我们需要为 Kafka Monitor 的 Topic 配置与 Broker 相同(或整数倍)数量的 Partition。


2.在生产的消息中包含了时间戳、序列号,Kafka Monitor 可以依据这些数据对消息的延迟、丢失率和重复率进行统计。


3.通过设定消息生成的频率,来达到控制流量的目的。


4.生产的消息在序列化时指定为一个可配置的大小,这样做的好处有:


  • 便于通过可配置的消息长度来验证 Kafka 对不同大小数据的处理能力

  • 相同的消息大小可以减少 Kafka 对因每次处理不同大小数据的性能不均带来的监控误差


5.通过设定单独的 Topic 和 Producer ID 来操作 Kafka 集群,可避免污染线上数据,做到一定程度上的数据隔离。

如何做黑盒监控

通过上面的内容,相信大家对 Kafka Monitor 的黑盒监控实现方式有了一定认识。结合我们在做黑盒监控工作实践中遇到的问题,大致总结出黑盒监控需要注意的事项以及一些建议:

监控指标的采集

黑盒监控所采集的监控指标主要有两大类:性能和可用性,这两类监控项的采集可参考以下建议:


  • 在读写类操作中,通过在消息体中携带 Timestamp 进行延时监控

  • 使用固定字符串进行语义正确性的监控,避免仅仅针对返回的状态码来判断

样本覆盖率

黑盒监控的采集样本应尽可能覆盖所有节点,以便能够及时发现因节点宕机引起的故障。样本覆盖率应该是可以采集并可量化的。在实践中,我们建议在监控样本的请求中携带特定的可在服务端节点上识别的标签(可以是特定的源 IP、用户名、请求头等等),这样便于统计样本覆盖率。

必要的流控

黑盒监控不是压力测试,应该避免过高的流量对线上服务产生冲击。必要时,流控的设定需要结合节点覆盖率和功能覆盖率两个指标进行。例如,我们在 Zookeeper 的黑盒监控实践中,考虑到 Zookeeper 的读写逻辑不同,承受的压力上限也不同,所以我们需要分别对读和写两个功能设定不同的监控样本数,这样就能够让两种功能的监控样本既能满足样本覆盖率,又不会对线上服务产生冲击。

数据隔离

受其特点决定,黑盒监控直接模拟用户行为对线上服务进行读写操作,所以必要的数据隔离是非常有必要的。具体的隔离方法需要视不同业务场景而定。例如,在 HDFS 的黑盒监控实践中,我们使用单独的与业务隔离的非特权账号,在指定的路径下读写数据。

功能覆盖率

黑盒监控应尽量覆盖所有(重要的)功能场景。此项需要我们对服务和线上使用场景有比较充分的了解。

超时处理

应对每个监控请求设定超时时间,避免因服务响应慢导致请求堆积而影响服务。

尽量简单

黑盒监控的实现逻辑应该在充分模拟外部用户行为的同时尽量简单,并减少对外部服务的依赖,这样可以降低因依赖方或监控本身的问题导致的监控数据异常。


文章转载自微信公众号京东云。


2019-08-23 11:467636

评论

发布
暂无评论
发现更多内容

不懂技术也能轻松搭建网站!美国虚拟主机的简易指南!

一只扑棱蛾子

虚拟主机 美国虚拟主机

网络技术探析:SDN、SD-WAN、CDN和SDH的关联与演进

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

AI给我们带来哪些方面惊喜呢?

小齐写代码

Native Instruments Kontakt 7 for Mac v7.8.1激活版下载

iMac小白

Aiseesoft AnyCoord for Mac(GPS虚拟定位软件) v1.0.36激活版

iMac小白

Garden Planner for Mac(园林绿化设计软件) v3.8.58注册激活版

iMac小白

Metasequoia 4 for Mac(水杉3D建模器) v4.8.6e激活版

iMac小白

JavaScript 的新数组分组方法

EquatorCoco

JavaScript 数组 开发语言

金芮学院派的优秀践行者

Geek_2d6073

A Comprehensive Guide IPQ5018-IPQ6010-IPQ6018-IPQ8072-IPQ8074

wallyslilly

IPQ6010 ipq6018 IPQ8072

听 GPT 讲 client-go 源代码 (11)

fliter

墨天轮2023年度数据库获奖名单

墨天轮

数据库 opengauss oceanbase 达梦 polarDB

6个受欢迎的 Angular 库

伤感汤姆布利柏

万界星空科技电子机电行业MES系统,2000元/年起

万界星空科技

制造业 mes 电子 电子mes 电子行业

2024年API经济的十大预测

幂简集成

API API经济

graphpad prism for Mac(专业医学绘图工具) v10.2.0激活版

iMac小白

基于 Fluid+JindoCache 加速大模型训练的实践

阿里巴巴云原生

阿里云 云原生 Fluid

华为云软件开发生产线CodeArts前端DevOps实践

华为云PaaS服务小智

云计算 软件开发 华为云

SD-WAN如何降低运维成本、简化运维工作?

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

听 GPT 讲 client-go 源代码 (12)

fliter

分享6个当下最受欢迎的 Vue UI 库

伤感汤姆布利柏

【线上直播】KaiwuDB 分布式系统 Range Split & Merge 原理详解

KaiwuDB

数据库 数据分区

即时通讯技术文集(第33期):IM开发综合技术合集(Part6) [共12篇]

JackJiang

网络编程 即时通讯 IM

真香!NineData SQL 开发全面适配 GaiaDB

NineData

数据库 百度云 数据源 NineData GaiaDB

测试管理进阶 | 量力而行:避免成为替罪羊

测试人

软件测试 测试开发 测试管理

深耕人工智能技术创新,天翼云荣获AAAI 2024竞赛冠军

编程猫

Google Adsense探索系列_第二弹(成功通过审核)

fkys

网站 Google 审核 adsense

专精特新“广东造” | 华大北斗:从“芯”出发 挺起产业“脊梁”

江湖老铁

什么是DevOps

华为云PaaS服务小智

DevOps 软件开发

Web3.0区块链技术开发方案:mint铭文铭刻制度开发

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

以小见大,从Kafka Monitor源码解读看如何做好黑盒监控_开源_京东云应用研发部_InfoQ精选文章