流批一体大数据架构

流批一体指的是流处理和批处理。

根据数据产生时间,划分为历史数据和实时数据,

根据数据明细粒度分为流水数据和切片数据;

根据数据处理方式按窗口大小分为流式处理与批式处理;

根据处理时延分为实时处理与离线处理。

流批一体包含两方面:

  1. 计算一体:同一套计算逻辑同时应用流处理和批处理,最终结果一致
  2. 存储一体:流处理与批处理过程中全程数据存储在同一介质

流批一体数仓

经典Lambda架构

Lambda 架构同时支持流计算与离线批处理,该架构有两条数据通道:

一条是实时的,使用消息系统结合实时流处理系统实现指标的实时计算,如采用Kafka存储 & Flink 计算

另一条非实时的,数据定时同步到仓库,批处理计算数仓分层数据模型。

存在缺点:

  1. 同一数据两份存储。一份用于实时流计算,一份用于离线批处理,耗资源、难保一致性
  2. 同一计算逻辑两套代码。指标计算,Lambda需要流处理、批处理各实现一次
  3. 需要集成多种组件支持不同类型应用。比如集成ES支持即席查询,postgresql支持复杂统计分析,导致架构和技术栈复杂

img

随着Flink引擎日趋完善,尤其在2020年发布Flink-1.12.0之后,逐渐出现了能切实解决上述问题的流批一体架构(Lambda plus,图1下半部分),采用该架构的数仓可称流批一体式数仓,即把Lambda架构的两条数据通道合并为一条,数据统一存储到一种介质中,且同一数据只需要存储一遍。流批一体式数仓主要体现在两方面:

  1. 数据积累(存储与处理)过程是流式的
  2. 数据积累后,支持批处理方式即席查询、统计分析等传统数仓支持的OLAP操作

从实现上看,Lambda plus架构利用Flink流表的相互转化实现了同一计算逻辑只需一套代码即可在流处理与批处理两种模式下得到一致结果。通用使用Flink cdc\状态计算等特性实现了历史数据+增量流水的连续处理。比如系统启动时利用Flink CDC 装载历史数据,再通过监听binlog将数据变动流水接入Flink; 或者利用Flink state&checkpoint特性从指定checkpoint恢复,以便在流水上接续计算,这样即可实现基于历史数据增量计算的目的。

总结

  1. 目前基于Flink的流批一体架构主要还是体现在计算引擎上的一体化,即流处理与批处理共同一套开发范式,一套代码,而存储的一体化上推出的Table store,虽然已经可以小规模使用,但是功能仍需健全
  2. 具有分布式计算、窗口计算、状态计算、流批一体计算等特性的Flink正逐渐成为实时流计算应用的主要引擎
  3. 流批一体式数仓是未来大数据架构发展趋势之一