专栏名称: 聊聊架构
在这里煮酒聊架构。
目录
相关文章推荐
架构师之路  ·  总体设计文档到底该写些什么? | ... ·  6 天前  
高可用架构  ·  Apache Dubbo 正式发布 ... ·  1 周前  
高可用架构  ·  100位技术创新者的年度案例复盘报告 ·  1 周前  
51好读  ›  专栏  ›  聊聊架构

Uber开源其Kafka集群监控工具Chaperone

聊聊架构  · 公众号  · 架构  · 2017-02-09 16:09

正文

作者|  Hrishikesh Barua
译者|  周元昊

近日,Uber工程师团队发布了开源项目Chaperone(中文意为监护人),这是一个Kafka监控工具。在Uber,它被用于监控多个数据中心和大容量Kafka集群中数据丢失、延迟以及重复的问题。

Uber现在的Kafka数据管道跨越了多个数据中心。Uber的各个系统会生成大量服务调用和事件的日志信息。这些服务在多个数据仓库间以多活模式运行。通过Uber的Kafka管道的数据被同时用于批处理以及实时数据分析。

Kafka作为数据总线,会连接Uber各个系统以及一个称为uReplicator的工具。uReplicator是一个Kafka的复制器,它参照了Kafka用于复制现存集群的MirrorMaker的原理进行设计。当日志消息被推送到Kafka的代理,代理会将消息进行汇总并推送到数据仓库对应的Kafka区域性集群。消费者会同时处理各个Kafka区域集群与合并了多个数据仓库数据的Kafka架构内的数据。Chaperone就用于实时监控这些消息。

Chaperone的首要职责是在数据通过管道时检测数据丢失、延迟、重复等数据异常。它包含四个组件:

  • 监控类库(AuditLibrary),它会收集、汇总并输出每个应用监控消息的统计信息。这个类库使用了翻转窗口(Tumbling Windows)的概念,用于汇总信息来生成监控消息,并将它们发送到对应Kafka主题(topic)。翻转窗口常被用于像Apache Flink这样的流处理系统中,用于将流数据分为不重叠的分片数据。

  • Chaperone服务(ChaperoneService),它会消费Kafka的每条数据并记录下时间戳,并向对应的Kafka主题中推送生成的监控消息。

  • Chaperone收集器(ChaperoneCollector),它会接收ChaperoneService产生的数据并将它们存入数据库,再将它们显示在用户界面中,这样就可以方便地检测和定位消息的丢失和延迟。

  • WebService,它会暴露出REST APIs用于获取或处理数据。

在Chaperone的实现上,必须要保证监控数据的准确性。为了实现准确性,Chaperone采用的策略是保证每一条数据会并且只会被监控一次。这里使用了预写式日志(WAL)。WAL会在消息从ChaperoneService被送到Kafka之前记录一条监控日志,这就保证了如果服务宕机,任何发送的消息都可以被重放。这个技术常见于一些数据库,如PostgreSQL。

还有一个策略是无论监控消息是在哪里、哪一步被处理,都能使用一个一致的时间戳。Chaperone尚未完全解决这一问题。目前使用的是基于消息编码的混合技术。对于Avro-schema编码的消息,时间戳可以在常量时间内被读出,对于JSON消息,Chaperone团队写了一个基于流的JSON解析器,它只会读取时间戳而不会解析整个JSON消息。而在代理客户端和服务端仍然使用消息处理时的时间戳。

Chaperone的作用并不仅限于检查数据丢失,还可以用其从Kafka中按照时间戳来读取数据而非通过偏移量。这样无论数据是否已经被处理,用户都可以读取任意时间范围内的数据。因此,Chaperone也可以被用作调试工具,让用户查看已经处理过的消息用以进一步分析。

Chaperone的源码可在GitHub上获取(https://github.com/uber/chaperone)。

今日荐文

点击下方图片即可阅读

Dropbox是如何存储用户帐号密码的?



QCon北京将邀请来自Google、Facebook、阿里巴巴、腾讯、百度、美团点评、爱奇艺等典型互联网公司的技术专家,分享他们在相关技术领域最新成果。具体详戳 「 阅读原文 」惊喜不停!