这是我参与「第四届青训营 」笔记创作活动的第1天
在了解Flink引擎之前,首先了解大数据是什么。
大数据(Big Data):是指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
流式计算的出现,主要是由于大数据的实时性所带来的价值更大的原因,比如:
1、在实时推荐板块:如果可以根据用户的实时行为数据发掘用户的兴趣、爱好,就能更加及时得向用户推荐更感兴趣的内容;
2、在监控场景下:如果能够及时发现业务板块的实时更新状态,检测其健康状况,就能够及时避免业务故障的发生。
由于大数据对于实时计算的需求以及要求越来越高,大数据计算框架也逐渐从批式计算转为流式计算。批式计算具有非实时、静态数据集以及按小时/天等周期计算的特点;而流式计算则为实时计算,具有快速、低延迟、无限流的动态特征,并且能够实现流批一体。
流式计算的主要框架:
(图片取自青训营Flink讲解课程)
Flink的整体架构包括以下部分:
- SDK 层。Flink 的 SDK 主要有两类,第一类是关系型 Relational SDK 也就是 SQL/Table,第二类是物理型 Physical SDK 也就是 DataStream。这两类 SDK 都是流批统一,即不管是 SQL 还是 DataStream,用户的业务逻辑只要开发一遍,就可以同时在流和批的两种场景下使用;
- 执行引擎层。执行引擎提供了统一的 DAG,用来描述数据处理流程 Data Processing Pipeline(Logical Plan)。不管是流任务还是批任务,用户的业务逻辑在执行前,都会先转化为此 DAG 图。执行引擎通过 Unified DAG Scheduler 把这个逻辑 DAG 转化成在分布式环境下执行的Task。Task 之间通过 Shuffle 传输数据,我们通过 Pluggable Unified Shuffle 架构,同时支持流批两种 Shuffle 方式;
- 状态存储。状态存储层负责存储算子的状态执行状态。针对流作业有开源 RocksdbStatebackend、MemoryStatebackend,也有商业化的版本的GemniStateBackend;针对批作业我们在社区版本引入了 BatchStateBackend。
baijiahao.baidu.com/s?id=170962…
在Flink整体架构的集群当中主要包含两个核心组件:
- JobManager(JM): 负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint以及协调容错恢复等等。
- TaskManager(TM): 负责执行一个DataFlowGraph各个task以及data streams的buffer和数据交换。
nightlies.apache.org/flink/flink…
Flink做到流批一体的过程:
总结
在实时化的大趋势之下,Flink已经逐步成为实时计算行业的标准,国内各大领域的厂商都将Flink作为实时计算的技术底座。而实时化业务只是一个起点,Flink的目标是为用户提供实时离线一体化的用户体验。而Flink流批一体的成功也离不开Flink开源社区的发展,在未来会发展得更好!