小米流式平台架构演进与实践

  • 时间:
  • 浏览:1

小米业务线众多,从信息流,电商,广告到金融等覆盖了众多领域,小米流式平台为小米集团各业务提供一体化的流式数据处理方案,主要包括数据采集,数据集成和流式计算十个 多多多模块。目前每天数据量达到 1.2 万亿条,实时同步任务 1.5 万,实时计算的数据 1 万亿条。

小米流式平台的愿景是为小米所有的业务线提供流式数据的一体化、平台化处理方案。具体来讲包括以下十个 多多多方面:

下图是 Talos Sink 的逻辑流程图,其基于 Spark Streaming 来实现一系列流程。最左侧是一系列 Talos Topic 的 Partition 分片,基于每个 batch 抽象公共逻辑,如 startProcessBatch() 和 stopProcessBatch(),不同 Sink 只需用实现 Write 逻辑;不同的 Sink 独立为不同的作业,处理相互影响;Sink 在 Spark Streaming 基础上进行了优化,实现了根据 Topic 流量进行动态资源调度,保证系统延迟的前提下最大限度节省资源。

下图是平台实现的端到端数据监控机制。具体实现是为每个消息都会十个 多多多时间戳 EventTime,表示这个 消息真正生成的时间,根据 EventTime 来划分时间窗口,窗口大小为一分钟,数据传输的每一跳统计当前时间窗口内接受到的消息数量,最后统计出消息的完整性度。延迟是计算某一跳 ProcessTime 和 EventTime 之间的差值。

SQL Config 转换为十个 多多多 Template Job 的流程如下所示。前面填写的 Jar 包地址即该 Template 的 Jar 地址,MainClass 是该 Template Job。假设将会有了 SQL DDL,都能能 直接转去掉 Table Descriptor,或者通过 TableFactorUtil 的 findAndCreateTableSource() 措施得到十个 多多多 Table Source,Table Sink 的转换过程类似于。完成前两步操作后,最后进行 sqlUpdate() 操作。从前便都能能 将十个 多多多 SQL Job 转换为最后可执行的 Job Graph 提交到集群上运行。

不言而喻做三层配置管理,是为了尽将会减少用户配置的错综复杂度。Table Schema、Table Format 和 Connector 1 什么都配置信息,组成了SQL DDL。将 SQL Config 返回给用户前一天,对于可修改的需用用户填写,从前便都能能 完成从内部人员表到 SQL DDL 的转换,红色字体表示的是用户修改的信息。

下图展示了 Job Config 转换为 Job Graph 的过程。对于 DDL 中的 Schema、Format 和 Property 是和 Flink 中的 Table Descriptor 是一一对应的,这个 请况下只需用调用 Flink 的相关内置接口就都能能 很方便地将信息转换为 Table Descriptor,如 CreateTableSource()、RegistorTableSource() 等。通过上述过程,DDL 便都能能 注册到 Flink 系统中直接使用。对于 SQL 句子,都能能 直接使用 TableEnv 的 sqlUpdate() 都能能 完成转换。

下图是 Streaming Platform 3.0 版本的架构图,与 2.0 版本的采集类似于,什么都我表达的角度不同。具体暗含 以下十几个 模块:

作者:夏军@小米

内部人员表转去掉 SQL DDL 的流程如下图所示。

夏军,小米流式平台负责人,主要负责流式计算,消息队列,大数据集成等系统的研发工作,主要包括 Flink,Spark Streaming,Storm,Kafka 等开源系统和一系列小米自研的相关系统。

不可修改的配置请况是假设消费的是 Talos 组件,越来越 connector.type 一定是 talos,则该配置不需用改;而默认值是从 Topic 头部前一天刚现在现在开始消费,但用户都能能 设置从尾部前一天刚现在现在开始消费,这个 请况属于带默认值或者用户可修改的配置;而什么都权限信息是用户需用配置的。

使用 Flink 对平台进行改造的设计理念如下:

Agent Source 的功能模块如下图所示。其支持 RPC、Http 协议,并都能能 通过 File 来监听本地文件,实现内存和文件双缓存,保证数据的高可靠。平台基于 RPC 协议实现了 Logger Appender 和 RPC 协议的 SDK;对于 Http 协议实现了 HttpClient;对于文件实现了 File Watcher 来对本地文件进行自动地发现和扫描,Offset Manager 自动记录 offset;Agent 机制与 K8S 环境角度整合,都能能 很容易地和后端的流式计算等相结合。

下图完整性介绍一下 MySQL 同步的案例,场景是将 MySQL 的十个 多多多表通过上述的机制同步到消息队列 Talos。具体流程是 Binlog 服务伪装成 MySQL 的 Slave,向 MySQL 发送 Dump binlog 请求;MySQL 收到 Dump 请求后,前一天刚现在现在开始推动 Binlog 给 Binlog 服务;Binlog 服务将 binlog 以严格有序的形式转储到 Talos。过都会接入 Spark Streaming 作业,对 binlog 进行解析,解析结果写入到 Kudu 表中。目前平台支持写入到 Kudu 中的表的数量级超过 4000 个。

Talos Sink 采用了下图所示的五种生活模式:

Talos Sink 和 Source 一起去组合成十个 多多多数据流服务,主要负责将 Talos 的数据以极低的延迟转储到什么都系统中;Sink 是一套标准化的服务,但其不够定制化,后续会基于 Flink SQL 重构 Talos Sink 模块。

SQL Config 转换为 Job Config 的流程如下图所示。

为了处理 Streaming Platform 1.0 的什么的问題,小米推出了 Streaming Platform 2.0 版本。该版本引入了 Talos,将其作为数据缓存区来进行流式数据的存储,左侧是多种多样的数据源,右侧是多种多样的 Sink,即将从前的级联架构转去掉 星型架构,优点是方便地扩展。

为了处理 Streaming Platform 2.0 的上述什么的问題,小米进行了絮状调研,也和阿里的实时计算团队做了一系列沟通和交流,最终决定将使用 Flink 来改造平台当前的流程,下面具体介绍小米流式计算平台基于Flink的实践。

小米流式平台发展历史分为如下十个 多多多阶段:

伴随着小米业务的发展,流式平台也经历三次大升级改造,满足了众多业务的各种需求。最新的一次迭代基于 Apache Flink,对于流式平台内部人员模块进行了彻底的重构,一起去小米各业务也在由 Spark Streaming 逐步切换到 Flink。

SQL 管理引入了十个 多多多 External Table 的底部形态。假设用户在平台上选着消费某个 Topic 的前一天,该底部形态会自动地获取上面提到的 Table 的 Schema 和 Format 信息,或者显示去掉 了注册 Flink Table 的逻辑;获取 Schema 时,该底部形态会将内部人员表字段类型自动转换为 Flink Table 字段类型,并自动注册为 Flink Tab 了。一起去将 Connector Properties 分成三类,参数带默认值,都能能了需用项要求用户填写;所有参数均采用 Map 的形式表达,非常便于后续转化为 Flink 内部人员的 TableDescriptor。

Streaming Platform 1.0 整体是十个 多多多级联的服务,前面包括 Scribe Agent 和 Scribe Server 的多级级联,主要用于采集数据,或者满足离线计算和实时计算的场景。离线计算使用的是 HDFS 和 Hive,实时计算使用的是 Kafka 和 Storm。确实这个 离线加实时的措施都能能 基本满足小米当时的业务需求,但也所处一系列的什么的问題。

下图展示了流式平台的整体架构。从左到右第一列橙色偏离 是数据源,暗含 两偏离 ,即 User 和 Database。

主要包括以下十个 环节:

Streaming Platform 2.0 目前的什么的问題主要有三点:

作者介绍:

Job 管理提供 Job 全生命周期管理、Job 权限管理和 Job 标签管理等功能;支持Job 运行历史展示,方便用户追溯;支持 Job 请况与延迟监控,都能能 实现失败作业自动拉起。

上面介绍了 SQL DDL 的创建过程,在将会创建的 SQL DDL 的基础上,如 Source SQL DDL 和 Sink SQL DDL,要求用户填写 SQL query 并返回给后端,后端会对 SQL 进行验证,然都会生成十个 多多多 SQL Config,即十个 多多多 SQL 句子的完整性表达。

小米流式平台未来的计划主要有以下几点:

下图展示了小米的业务规模。在存储层面小米每天离米 有 1.2 万亿条消息,峰值流量都能能 达到 4400 万条每秒。转储模块仅 Talos Sink 每天转储的数据量就高达 1.6 PB,转储作业目前将近有 1.5 万个。每天的流式计算作业超过 4000 个,Flink 作业超过 400 个,Flink 每天处理的消息量都能能 达到 7000 亿条,数据量在 1 PB 以上。

Streaming Platform 2.0 的优势主要有: