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上获取。
原文来自:InfoQ
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。
IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。
结合权威身份认证的精准人脸风险查询服务,提升人脸应用及身份认证生态的安全性。人脸风险情报库,覆盖范围广、准确性高,数据权威可靠。
全国城市和站点空气质量查询,污染物浓度及空气质量分指数、空气质量指数、首要污染物及空气质量级别、健康指引及建议采取的措施等。
输入手机号和拦截等级,查看是否是风险号码