文章目录
- 引言
- Flink基本概述
- 传统数据架构的不足
- Dataflow中的几大基本概念
- Dataflow流式处理宏观流程
- 数据并行和任务并行的区别
- Flink中几种数据传播策略
- Flink中事件的延迟和吞吐
- 事件延迟
- 事件的吞吐
- 如何更好的理解事件的延迟和吞吐
- flink数据流的几种操作
- 输入输出
- 转换操作
- 滚动聚合
- 窗口操作
- Flink中的时间语义
- 事件时间和处理时间
- Flink水位线
- Flink中的一致性问题
- 利用状态保证一致性
- 任务保证和结果保障的概念
- 小结
- 参考
引言
本文初步针对flink中几个核心的概念和使用的注意事项进行简单的介绍,让读者针对flin中一些核心的组件使用有一个初步的了解。
Flink基本概述
传统数据架构的不足
因为特殊需要我们针对采集的数据等进行数据样本分析,所以大部分企业都会在传统事务型的OLTP
数据库补充一套OLAP
同步数据。
好在如今有了各种分析型的数据仓库可以做到这一点,但因为如今的微服务架构使得各个应用都遵循专注做好一件事
的哲学。这是的事务型数据库数据分布在不同的系统上,所以我们就需要一款实时采集数据流数据处理应用,将这些相互隔离的数据库数据联合并采集到分析型数据仓库上。
而上述这个同步的过程,也就是我们常说的ETL即提取-转换-加载(Extract-Transform-Load,)
,整体来说,它的执行步骤为:
- 提取:从事务型数据库中提取数据
- 转换:按照需求进行数据转换为符合要求的数据格式(可能包含数据验证、数据归一化、编码、去重、表模式转换)
- 加载:同步到分析型数据库上完成持久化
所以一旦数据同步到分型数据库上,我们就可以利用分析型数据库做到如下几点:
- 定期数据报告:以生成计算业务习相关的统计数据,帮助管理层进行评估企业整体健康状况。
- 即席查询:利用分析型数据的优势,通过查询数据解决特定问题,以便进行下一步的商业决策。
Dataflow中的几大基本概念
Dataflow流式处理宏观流程
Dataflow代表着数据如何在不同的操作之间的流动,它通常是由一张有向图构成,即:
- 数据源:对于flink中没有输入一端的算子,即数据源头,我们称之为dataflow的源数据。
- 算子:有输入和输出,即通过从输入端获取数据并对其进行计算,然后产生数据从输出端输出供后续处理。
- 数据汇:经过无数个算子,将数据汇聚到终端即没有输出的一端,这种没有输出端的算子就是数据汇。
数据并行和任务并行的区别
上述说明了构成了Dataflow
的宏观核心概念的逻辑视图,按照物理分布式视图下,算子可能会发布在不同的物理机器上,例如下图所示,中间进行数据转换计算的算子,各分配两个发布在不同的机器下作为并行任务运行,各自完成自己的一部分的计算任务。由此,也就有了数据并行和任务并行的概念。
先来说说数据并行,本质就是将数据进行分组,使之同一操作的多个任务切割为不同的子集,这使得计算负载能够分配到不同算子上工作,例如按照用户id进行分组将数据发布到负载的算子上进行数据运算。
而任务并行则说相同规则的算子可以多个并行处理,源数据可以并行传输到并行算子中运行,可以更好的利用集群资源进行运算。
Flink中几种数据传播策略
采集到源数据之后,flink会按照数据传播策略将数据项分配给不同的任务,对应的传播策略也有以下几种:
- 转发策略:将数据按照一对一映射的方式传输到指定的节点上,这种做法对于部署在相同机器上的任务非常友好,因为它们避免的网络通信的开销。
- 广播策略:即针对收到的数据流,将数据拷贝的多份然后发布到所有的下游算子中,因为涉及多算子节点的网络通信,所以代价也会相对昂贵一些。
- 基于键值对的策略:按照事先约定