流批一体主要核心在三个方面:
存储一体 计算一体 应用一体
1、统一数据采集层。
数据源:在数据源层面,分为日志类和业务类,使用一致的的采集方法。使用Flink CDC统一采集,经Kafka传输到数据存储层。这样不需要再维护Sqoop和另一套采集系统。
2、统一数据存储层。
消息队列
首先在计算层,Pulsar Broker 不保存任何状态数据、不做任何数据存储,称之为服务层。其次,Pulsar 拥有一个专门为消息和流设计的存储引擎 BookKeeper,称之为数据层。如果要支持更多的 Producer 和 Consumer,可扩充上面无状态的 Broker 层;如果要支持更多的数据存储,可单独扩充底层存储层。这种分层的架构为做批流融合打好了基础。因为它原生分成了两层,可以根据用户的使用场景和批流的不同访问模式,来提供两套不同的 API。
如果是实时数据的访问,可以通过上层 Broker 提供的 Consumer 接口; 如果是历史数据的访问,可以跳过 Broker,用存储层的 reader 接口,直接访问底层存储层。
数据湖
可使用Hudi、Iceberg、paimon作为流批一体的统一存储层。统一存储数仓的ODS、DWD、DWS、DWT、DM各层数据。
(1)存储原始数据,数据结构多样化。 (2)支持多种计算模型,解耦计算引擎和存储系统。 (3)支持灵活廉价的底层存储,可使用本地HDFS、或云上对象存储S3、OSS。 (4)支持事务ACID。
3、统一元数据层。
使用Flink Catalog统一元数据管理,例如数据库、表、分区、视图以及外部系统。Catalog提供统一API,统一管理元数据,使其可从TableAPI和SQL查询语句中访问。使用Flink Catalog解决了大数据引擎不同元数据格式造成的复杂问题,并且Catalog与Hive MetaStore兼容。
4、统一计算引擎层。
使用Flink Unified DataStream统一计算引擎层。Flink Unified DataStream能更好支持流和批两种计算模式。Unified DataStream统一和简化了以前流批要分别使用DataStream和Dataset的繁琐。并且Unified DataStream针对Unbounded场景,在磁盘I/O访问,序列化和反序列化做了优化,使得Unbounded和Bounded的效率、可用性、易用性都得到很大提升。
5、统一SQL引擎层。
可使用Flink SQL或Presto/Trino。Flink SQL将流处理和批处理统一,支持大部分标准SQL的语法和语义。
6、统一应用层
结果视图需要支持低延迟的查询分析,通常需将数据结果存储到列存分析系统,可使用doris/starrocks和Presto/Trino。
7、初步架构设计