写点什么

HubSpot 是如何监控 Kafka 的性能的

  • 2015-10-11
  • 本文字数:929 字

    阅读完需:约 3 分钟

Sidekick 是数字营销公司 HubSpot 的一款产品,用于在接收者打开邮件时实时通知发送者。创建和发送通知的基础设施以 Kafka 为基础创建。 Ze’ev Klapow 是 Sidekick 基础设施团队的一名资深软件工程师。近日,他撰文介绍了他们如何在Sidekick 中监控Kafka 的性能。

Sidekick 通知管道的架构大致如下:

Ze’ev 指出,像上图这样就许多 Kafka 消费者连接在一起,需要监控每个消费者的性能,而且需要在消费者出现问题时快速定位。为此,他们开发了如下两个指标。

“增量(Delta)”

该指标用于确定消费者是否能够跟上某个主题的数据生成速度,如下图所示:

在 Kafka 中,每条消息会发送到某个主题的一个分区上,每条消息在写入时会获得一个递增的偏移量数值。消费者在消费消息时会记录它消费的最后一条消息的偏移量。增量即是该偏移量与分区头之前差异。对于每个 Kafka 消费者,他们会记录如下两个增量数据:

  • 增量总和为所有分区的增量之和。增量总和增加说明消费者太慢或数据量太大,可以考虑扩展消费者,或者增加并发。
  • 最大增量为所有分区中的最大增量。最大增量增加说明只有一个工作进程出现问题,或者分区之间没有实现很好的负载均衡。

“延迟(Lag)”

该指标用于监控消息处理延迟。在 Sidekick 中,他们会在所有的消息上都存储一个时间戳。如下图所示,总延迟为事件创建和通知发送之间的时间,可以帮助他们监控整个管道:

另外,如下图所示:

他们还可以进行更细粒度地延迟监控,这有助于在总延迟开始偏离正常轨道时进行调试。

按照 Ze’ev 的说法,上述两个指标提供了系统健康状况的一个完整视图。当消费者出现问题时,他们首先会依据下表进行问题判断:

Δ↑

情况糟糕!

有地方出现问题了。

情况可能并不坏。

增量增加但延迟稳定可能代表流量峰值或类似的问题。

Δ↑ 增量没有增加,但延迟增加。

可能是该消费者的上游存在问题。

一切正常!

复制代码
**LAG↑**

LAG↓

Ze’ev 表示,当出现问题时,此表可以为问题调试指明方向;当没有问题时,此表可以让他们对系统的性能更加自信。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-11 19:003111
用户头像

发布了 1008 篇内容, 共 389.6 次阅读, 收获喜欢 344 次。

关注

评论

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

给DevOps加点料——融入安全性的DevSecOps

禅道项目管理

DevOps 运维 测试 开发 安全性

读后感之《任正非:以客户为中心》

王新涵

2020-09-03-第十三周学习总结

路易斯李李李

商业通识 : 商业为什么能进步?

Walker

学习 得到 个人成长 商业

拥抱K8S系列-05-基于docker部署面临的问题

张无忌

Docker 运维

阿里巴巴发布国内首个公益区块链标准 用技术让公益公开透明

CECBC

区块链 公益

用函数式写法精简Java代码的一个例子

Sean

Java 函数式编程

Go: gops如何与Go运行时交互?

陈思敏捷

gops Go 语言

从湖南“软硬兼施”,管窥三湘水畔的智能浪潮

脑极体

[翻译] Go Concurrency Patterns: Pipelines and cancellation[Go并发模式]

卓丁

channel pipeline

给大家介绍下,这是我的流程图软件 —— draw.io

程序员小航

工具 流程图 draw.io drawio-desktop 画图软件

不支持原子性的 Redis 事务也叫事务吗?

大头星

Java redis 事务

云原生 go-zero 微服务框架

万俊峰Kevin

微服务 microservice go-zero Go 语言

甲方日常 8

句子

工作 随笔杂谈 日常

翻转链表,机器学习视觉训练,对数据的人工标注,使信息丢失,John 易筋 ARTS 打卡 Week 16

John(易筋)

大数据 学习 ARTS 打卡计划 翻转链表 Google论文评判人工预处理

学习 Java,有什么书籍推荐?学习的方法和过程是怎样的?

沉默王二

Java 学习 程序员 书单

oeasy教您玩转linux010206 蒸汽机车 sl

o

有奖征文重磅来袭,来!一起玩把大的!

有只小耳朵

透彻理解AQS源码分析系列之AQS基础二

InfoQ_d2212957090d

深入理解JVM垃圾回收机制 - GC Roots枚举

Skye

GC Roots枚举 安全点 安全区域 OopMap

架构师训练营第十三周总结

张明森

ARTS打卡 第15周

引花眠

微服务 ARTS 打卡计划

如何将VSCode变成绿色版本

lmymirror

vscode 教程

ARTS Week15

时之虫

ARTS 打卡计划

LeetCode题解:239. 滑动窗口最大值,单调队列,JavaScript,详细注释

Lee Chen

大前端 LeetCode

程序的机器级表示-数组的分配和访问

引花眠

计算机基础

Spring 5 中文解析测试篇-Spring测试

青年IT男

Spring5 JUnit

一点思考|工作十几年了,竟从未用过do-while!

王磊

Java

Golang Package sync 透析

卓丁

sync Go 语言

3. 站在使用层面,Bean Validation这些标准接口你需要烂熟于胸

YourBatman

Hibernate-Validator Bean Validation 数据校验

握草,你竟然在代码里下毒!

小傅哥

Java 程序员 小傅哥 bug 有毒代码

HubSpot是如何监控Kafka的性能的_语言 & 开发_谢丽_InfoQ精选文章