FinOps有望降低企业50%+的云成本! 了解详情
写点什么

Chaperone:来自 Uber 工程师团队的 Kafka 监控工具

  • 2017-02-08
  • 本文字数:1246 字

    阅读完需:约 4 分钟

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 上获取。

查看英文原文: Chaperone - A Kafka Auditing Tool from the Uber Engineering Team

2017-02-08 18:004208
用户头像

发布了 41 篇内容, 共 12.3 次阅读, 收获喜欢 3 次。

关注

评论

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

通俗讲解分布式锁,看完不懂算我输

Java小咖秀

Java 分布式 多线程 并发

Python基础之:Python中的模块

程序那些事

Python Python3 程序那些事

【LeetCode】删除排序链表中的重复元素 IIJava题解

Albert

算法 LeetCode 3月日更

网络连接之协议栈

Kylin

协议栈 3月日更 21天挑战 网络连接

如何正确使用Python临时文件

华为云开发者联盟

Python 安全 临时文件 tempfile 库函数

​Autonomous Dream Works的独创力杰作EGGNetwork EFTalk

币圈那点事

Datadog 能成为最大的云监控厂商吗

睿象云

运维 运维平台 Datadog 云监控

镜像仓库学习笔记

lenka

3月日更

一段java代码执行旅程

华为云开发者联盟

JVM class 指令 java代码 java栈

Worktile 前端工程化之路

PingCode研发中心

大前端

Golang号称最快的Json解析器速度可达5623ns/op

happlyfox

学习 3月日更 Go 语言

电子证照上链--助推智慧政务

13530558032

设计与思考,关于资源和生命周期

程序员架构进阶

设计实践 生命周期 28天写作 3月日更 池化技术

Rust从0到1-基础概念-数据类型

rust 数据类型

华为云PB级数据库GaussDB(for Redis)揭秘第六期:Feed流场景中的应用

华为云开发者联盟

数据库 redis 华为云 GaussDB Feed流

区块链六大应用场景,推动政府信息化发展

13828808769

区块链+ #区块链#

智慧公安信息化管理系统,重点人员管控系统的搭建

13828808769

智慧交通

看东鹏饮料如何从150亿条数据中洞察先机 | 精选案例

亚马逊云科技 (Amazon Web Services)

初识Golang之声明函数

Kylin

3月日更 21天挑战 Go 语言

搞懂 ZooKeeper 集群的数据同步

HelloGitHub

Java zookeeper ZooKeeper原理

QCon全球软件开发大会:推动创新,实现技术落地

博文视点Broadview

Gas费用持续攀升!NA公链NAC公链如何破解高额Gas费用的困局?

区块链第一资讯

区块链BaaS应用平台搭建,助力企业运用区块链解决业务问题

13828808769

区块链 区块链+ 区块链发展 #区块链#

区块链中药溯源--区块链为中医药溯源认证

13530558032

基于深度学习的两种信源信道联合编码

华为云开发者联盟

深度学习 通信 编码 信源编码 信道编码

分布式锁的实现方案

360技术

异步机制和CPU架构对 Redis 性能的影响

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

推荐 2 款必备的 Django 开发神器

星安果

Python django Web 后端

主数据建设的挑战与发展

EAWorld

低代码是什么?低代码价值主要体现在哪?

优秀

低代码

能源绿色管控:天然气站启动数字化转型,工业企业该如何突围?

一只数据鲸鱼

物联网 数据可视化 智慧城市 能源管理 天然气

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
Chaperone:来自Uber工程师团队的Kafka监控工具_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章