LinkedIn开源Kafka Monitor

一个关于Kafka的监控测试框架

原文请查阅链接

Apache Kafka 已经成为了一个面向大规模流数据的,标准的消息系统。在Linkedin这样的公司,
它被用作各类数据管道的主力,支持一系列关键服务。它已经成为确保企业基础架构健壮、容错和高性能的核心组件。

在过去, Kafka 网站高可用工程师 (SRE)必须依赖Kafka服务器的报告来度量、监控一个Kafka集群
(例如,访问流量,离线分区计数,under-replicated分区计数,等等)。如果任何一个指标不可用,或者任何指标的值是异常的,
都有可能是某些方面出错了,SRE则 需要介入问题排查。然而,从一个Kafka集群获得这些指标并不像听起来那么容易—无论集群是否可用,
一个很低的流入流出值并不没有必要告诉我们,也不能为最终用户提供一个基于可用性经验的、细粒度的参考结果
(比如说,在这个事件中描述道:只是一个分区的子集异常了)。随着我们的集群增长得愈加庞大,为越来越多的重要业务提供服务,
可靠、精确地度量Kafka集群可用性的能力,也就变得越来越重要。

为了监控可用性,有必要主干的稳定性,从功能上或性能方面尽可能早的捕获可回溯的信息。
Apache Kafka 在虚拟机中包含一系列单元测试和系统测试方法,用于检测错误。
到目前为止,我们仍然能发现一些偶发错误,它们直到Kafka在真实的集群中已经部署很多天甚至几周之后才显现。
这些错误会引起许多运行时开销或者导致服务中断。有些时候该问题很难被重现,SRE工程师只能在开发者找到原因之前回退到上一个版本,
这显然要增加Kafka的部署和维护成本。在许多情况下,这些错误可以在更早的阶段就被探查出来,
假如我们可以在一个具备多样化故障转移的环境部署Kafka,同时加载生产规模的流量、延长持续时间。

Kafka Monitor 是一个监控测试Kafka部署情况的框架,可以帮助我们针对上面的不足提供以下能力:
(a)在生产集群持续监测SLA (b)在测试集群持续进行回归测试。
在最近的 KafkaSummit 我们已经宣布在 Github上开源 Kafka Monitor。
接下来我们将继续开发 Kafka Monitor 并把它作为我们事实上的Kafka认证解决方案。
我们希望它也能使别的公司从中收益,那些希望验证和监控它们自己的Kafka部署情况的公司。

设计概览

Kafka Monitor 使得这些事情变得很容易:
在真实的生产集群中,开发和执行长时间运行特定的Kafka系统测试,基于用户提供的SLA监控已经部署的Kafka。

开发者可以创建新的测试,通过组装可复用的组件,用来仿真各种各样的场景(例如 GC 中断,代理被硬杀,回滚,磁盘故障,等等),收集指标;用户可以运行 K afka Monitor测试用例,在这些场景执行的时候可以伴随用户定义的定时任务,
无论是测试集群还是生产集群,都能够验证,Kafka在这些场景下,是否能够达到预期效果。 为了实现上述目标,Kafka Monitor 的设计模型包含一系列测试结果收集器和服务。

一个Kafka Monitor 实例运行在一个单独的Java进程,在相同的进程里可以再产生多个测试用例和服务。
下面的示意图表达了服务,测试用例和Kafka Monitor实例之间的关系,也可以知道Kafka Monitor 如何在Kafka集群和用户之间相互作用。

KafkaMonitor OverView

测试

一个典型的测试,将仿真一系列场景,基于某些前期已经定义的定时任务,需要启动一些生产者/消费者,上报指标,验证指标值是否符合前期定义的断言。举个例子,Kafka Monitor 能够启动一个生产者,一个消费者,每五分钟反射一个随机代理(比方说,如果说它是监控一个测试集群)。Kafka Monitor 接下来就可以度量可用性,消息丢包率,揭露JMX指标,用户可以在一个实时的健康仪表盘看到这些信息。
如果消息丢包率比一些阀值还要大,它能发出告警,这些阀值基于用户特定的可用性模型确定。

服务

我们概括了仿真逻辑,针对持续长时间场景的服务,目的是为了加快、简化从复用组件组装测试的过程。
一个服务将再产生它自己的线程,去执行那些场景、测量指标。举例说明,我们现在已经具备如下服务:

  • 生产者服务,生成Kafka消息,测量生产速率和可用性指标。
  • 消费者服务,消费Kafka消息,测量消息丢包率,消息复制速率以及端到端时延。这些服务依赖于生产者服务来提供消息,它会嵌入一个消息序列号和时间戳。
  • 代理反射服务,能够基于预定义的定时任务提供一个发射代理。

一种测试需要由许多服务组成,验证一系列超时场景。举例来说,我们可以创建一个测试,包含一个生产者服务,一个消费者服务,以及一个代理反射服务。这个生产者服务和消费者服务,将被配置为从同一个主题发送和接收消息。那么这个测试将验证消息丢包率持续为0。

使用多个Kafka Monitor实例进行集群间性能测试

当所有的服务和相同的Kafka Monitor实例必须运行在同一个物理机器上的时候,我们可以启动多个Kafka Monitor 实例在不同的集群,
一起协作完成一个精密控制的端到端测试。在下面这个测试示意图中,我们启动了两个Kafka Monitor 实例在两个集群中。
第一个Kafka Monitor 实例包含一个生产者服务,提供给Kafka 集群1。消息从集群1反射到集群2。
最后,在第二个Kafka Monitor 实例的消费者服务,处理了消息,来自集群2中的同一个主题,并且报告了通过集群通道的端到端时延。


KafkaMonitor

Kafka Monitor 在LinkedIn的应用

监控Kafka集群部署情况

在2016年早些时候,我们部署了Kafka Monitor用来监控可用性和端到端时延,包括LinkedIn的每一个Kafka集群。
本项目的 wiki 展示了更多细节,以及这些指标是如何度量的。这些基本但是关键的指标,对于积极地监控我们Kafka集群的SLA非常有用。
在端到端工作流中验证客户端库
正如早先发布的一篇BLOG中说明的那样,我们有一个客户端的库,缠绕在普通的Apache Kafka生产者和消费者,
用于提供一些 Apache Kafka 无法支持的特性,例如Avro编码,审计和大消息支持。我们也有一个REST客户端,
它允许非JAVA应用程序从Kafka生产和消费数据。这些客户端库和每一个新的Kafka release版本,验证它们的功能可用性是非常重要的。
Kafka Monitor允许用户将客户端库作为插件,加入到它的端到端工作流中。我们已经部署的Kafka Monitor实例,
已经在测试中使用我们封装的客户端和REST客户端,用于验证它们的性能和功能,使得这些客户端库和Apache Kafka的每一个新的release版本都能符合要求。

验证Apache Kafka新的内部Release版本

我们通常每个季度都会从Apache Kafka的主干版本复制代码,然后建立一个新的内部release版本,或者吸收Apache Kafka新的特性。
从主干复制代码的一个重要的收益就是,部署Kafka到LinkedIn的生产集群之后,通常能在Apache Kafka的主干版本上探查到一些问题,
这样的话我们就能在Apache Kafka 官方正式的release发布之前获得修复。
基于复制Apache Kafka主干版本可能存在的风险,我们做了额外的工作,在一个测试集群中验证每个内部release版本—从生产集群中获得镜像流量—几周以前生产环境部署新的release。
举例来说,我们执行回退或者硬杀掉代理的时候,需要检查JMX指标去验证确实有一个控制进程并且没有离线分区,为了验证Kafka在故障迁移场景中的可用性。
在过去,这些步骤都是手工进行的,非常消耗时间,并且我们有大量事件和许多场景需要测试,这种方式的伸缩性就非常差。我们切换到Kafka Monitor之后,
这个过程就自动化了,并且可以覆盖更多故障迁移的场景,而且是可以持续进行的。

相关工作的比较

Kafka Monitor对其它公司而言也是有用的,可以帮助验证他们自己的客户端库和Kafka集群。
当然Microsoft也已经在Github上有了一个开源项目,也是监控室Kafka集群的可用性和端到端时延。
同样地,在这篇发表的博客中,Netflix介绍了一种监控服务,即发送持续的心跳消息,同时度量这些消息的时延。
Kafka Monitor自己的特点就是专注于可扩展性,模块化以及客户端库和多样化场景支持。

开始

Kafka Monitor的源代码可以从Github下载,基于Apache 2.0 授权协议。使用指南,设计文档和未来规划在README文件和项目wiki中可以查阅。我们很乐于听到你对该项目的反馈意见。当Kafka Monitor被设计用来作为,测试和监控Kafka部署情况的框架的时候,我们视线了一个基本的但是有用的测试,确保你能开箱即用。这些测试可以度量可用性,端到端时延,消息丢包率以及消息复制速率,通过运行一个生产者和一个消费者,它们使用同一个主题生产/处理消息。你可以在终端看到这些指标,基于HTTP GET请求、程序化地获得它们的值,甚至随着时间查看它们的值,通过一个简单(快速启动)的图形界面,如下面的截图所示。关于如何运行测试、查看指标的详细介绍内容请参阅项目网站。

KafkaMonitor

未来的工作

我们的计划中有许多工作要做,改进、提升Kafka Monitor,使它更有用。

增强测试场景

每次执行代码check-in的时候,Apache Kafka包含了一大批系统测试。我们计划在Kafka Monitor中实现一个简单的测试,
然后部署到LinkedIn的测试集群,最终做到持续运行这些测试。这使得我们可以在问题发生的时候进行性能回溯,
还可以验证各种特性的是否可用,例如限额、管理操作,授权,等等。

整合Graphite和类似的框架

它对用户来说非常有用,可以在他们的组织内,通过一个简单的web服务查看所有跟Kafka相关的指标。
我们计划在Kafka Monitor 中提升现有的报表服务,这样用户就能够导出Kafka Monitor的指标到Graphite或者他们选择的其它框架
整合故障注入框架
我们也计划将Kafka Monitor与故障注入框架整合(名叫 Simoorg),可以测试、收集Kafka在更全面的故障迁移场景中的处理能力,例如磁盘故障或者数据错误。

鸣谢

Kafka Monitor能够被设计和实现出来,应该感谢LinkedIn Kafka 团队的努力。

我们在招聘

LinkedIn 数据流基础设施群组 正在 招聘Kafka方向的软件开发工程师和网站可用性工程师,
致力于我们的流数据处理平台(Samza)以及我们的下一代变化捕获技术。
更多细节请联系 Kartik Paramasivam 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,657评论 18 139
  • 发行说明 - Kafka - 版本1.0.0 以下是Kafka 1.0.0发行版中解决的JIRA问题的摘要。有关该...
    全能程序猿阅读 2,859评论 2 7
  • kafka的定义:是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Act...
    时待吾阅读 5,321评论 1 15
  • 本文转载自http://dataunion.org/?p=9307 背景介绍Kafka简介Kafka是一种分布式的...
    Bottle丶Fish阅读 5,469评论 0 34
  • 反射基础知识链接:http://www.jianshu.com/p/370073fad7e3 反射应用的场景 比如...
    风吹稻子阅读 546评论 0 2