背景介绍
小米流式平台发展历史
基于 Flink 的实时数仓
未来规划
背景介绍
User 指的是用户各种各样的埋点数据,如用户 APP 和 WebServer 的日志,其次是 Database 数据,如 MySQL、HBase 和其他的 RDS 数据。
中间蓝色部分是流式平台的具体内容,其中 Talos 是小米实现的消息队列,其上层包含 Consumer SDK 和 Producer SDK。
此外小米还实现了一套完整的 Talos Source,主要用于收集刚才提到的用户和数据库的全场景的数据。
小米流式平台发展历史
首先是 Scribe Agent 过多,而配置和包管理机制缺乏,导致维护成本非常高;
Scribe 采用的 Push 架构,异常情况下无法有效缓存数据,同时 HDFS / Kafka 数据相互影响;
最后数据链级联比较长的时候,整个全链路数据黑盒,缺乏监控和数据检验机制。
由于 Agent 自身数量及管理的流较多(具体数据均在万级别),为此该版本实现了一套配置管理和包管理系统,可以支持 Agent 一次配置之后的自动更新和重启等。
此外,小米还实现了去中心化的配置服务,配置文件设定好后可以自动地分发到分布式结点上去。
最后,该版本还实现了数据的端到端监控,通过埋点来监控数据在整个链路上的数据丢失情况和数据传输延迟情况等。
基于 Flink 的实时数仓
Job 管理
SQL 管理
首先根据外部表获取 Table Schema 和 Table Format 信息,后者用于反解数据,如对于 Hive 数据反序列化;
然后再后端生成默认的 Connector 配置,该配置主要分为三部分,即不可修改的、带默认值的用户可修改的、不带默认值的用户必须配置的。
首先在 SQL Config 的基础上增加作业所需要的资源、Job 的相关配置(Flink 的 state 参数等);
然后将 SQLConfig 编译成一个 Job Descriptor,即 Job Config 的描述,如 Job 的 Jar 包地址、MainClass 和 MainArgs 等。
未来规划