【专题推荐】AI大模型落地的前景和痛点,技术人面临哪些机会和挑战? 了解详情
写点什么

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:004200
用户头像

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

关注

评论

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

Redis做消息队列全攻略

架构师修行之路

redis MQ 消息队列

【Spring注解驱动开发】AOP核心类源码解析,这是最全的一篇了!!

冰河

spring aop ioc

AtmoicXXX与AtmoicXXXArray源码分析

Darren

源码 内存布局 CAS java 并发 AtmoicXXX

实时数仓在滴滴的实践和落地

滴滴技术

大数据 滴滴技术 数据通道服务

浮点数比较的精度问题

C语言与CPP编程

c c++

滴滴七层接入平台实践和探索

滴滴技术

微服务 运维 滴滴技术 七层接入

自定义线程池来实现文档转码

架构师修行之路

缓冲区溢出

C语言与CPP编程

c++ C语言 缓冲区 堆栈溢出

指针变量的传值和传址

C语言与CPP编程

c++ 指针 C语言

我们一起学程序-五子棋

叫练

Java 多线程 游戏 websocket

Elasticsearch初步认识

枫林

Java elasticsearch ES

GPU虚拟机创建时间深度优化

滴滴技术

云计算 虚拟化 滴滴技术

滴滴Ceph分布式存储系统优化之锁优化

滴滴技术

云计算 分布式存储 Ceph 滴滴技术

滴滴云平台事业群——就是稳!

滴滴技术

招聘 滴滴技术 滴滴云平台事业群分享月

闲聊胡扯

C语言与CPP编程

随笔杂谈

物联网的银河,华为的桨,少年的歌

脑极体

Zeppelin SDK :Flink 平台建设的基石

Apache Flink

flink

数据分析之伯克森谬误:颜值和性格真成反比吗

KAMI

人生 数据分析 数据

在Rust里面嵌入python代码

lipi

Python rust

架构师训练营0期 第十二周作业

WW

Docker 安装和简单使用

枫林

Docker

滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析

滴滴技术

大数据 elasticsearch 滴滴技术

c语言函数指针之回调函数

C语言与CPP编程

C语言 回调函数 函数 函数指针

滴滴数据通道服务演进之路

滴滴技术

大数据 滴滴技术 数据服务通道

1.Flink检查点算法-15

小知识点

scala 大数据 flink

【高并发】要想学好并发编程,关键是要理解这三个核心问题

冰河

写作 多线程 高并发 同步 分工

C/C++函数指针与指针函数

C语言与CPP编程

c++ C语言 函数指针

C语言与C++常见面试题

C语言与CPP编程

c++ 面试 C语言

可编程网卡芯片在滴滴云网络的应用实践

滴滴技术

云计算 芯片 滴滴技术

滴滴数据仓库指标体系建设实践

滴滴技术

大数据 数据仓库 滴滴技术

你真的了解 Base64 吗

hepingfly

Java base64 编码

Chaperone:来自Uber工程师团队的Kafka监控工具_DevOps_Hrishikesh Barua_InfoQ精选文章