Flink
Flink:是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算,支持流批一体化处理,从底层APIS->核心APIS(DataStream、DataSet)->声明式领域专用语言(Table API)->最高层语言(SQL)。
批处理:有界、持久、大量,批处理适合需要访问全套记录才能完成的计算工作,一般用于离线统计;
流处理:无界、实时,流处理无需针对整个数据集执行操作,而是对通过系统传输的每个数据项进行操作,一般用于实时统计;
一、基础
1. 特点
A. 高吞吐和低延迟,可每秒处理数百万各事件,毫秒级延迟;
B. 结果的准确性,提供了事件时间和处理时间语义;
C. 精准一次的状态一致性保证;
D. 可以连接到最常用的存储系统,如Kafka、HDFS等;
E. 高可用:可与K8s、YARN等集成,具有可从故障中快速恢复和动态扩展任务的能力。
2. 角色
A. 客户端(Client):代码由客户端获取并做转换,之后提交给JobManger;
B. JobManger:对作业进行调度,将任务分发给TaskManger;
C. TaskManger:干活的,进行数据的处理操作。
3. 部署模式
A. 会话模式:
B. 单作业模式:
C. 应用模式:
4. 运行模式
A. Standalone模式:Flink自带集群,开发测试环境使用;
B. Yarn模式:计算资源统一由Hadoop YARN管理,生产环境使用;
C. K8s模式:
D. 历史服务器
5. 架构核心概念
A. 并行度(Parallelism):
B. 算子链(Operator Chain):
C. 任务槽(Task slots):
二、DataStream API
1. 窗口(Window)
A. 概念:是将无限数据流切割成有限的‘数据块’进行处理,窗口是在开始时间数据到达时才创建,当到达结束时间时就会对收集的数据进行处理并关闭,可按键分区(Keyed)处理;
B. 窗口的分类
按度量方式可分为:时间窗口和计数窗口;
按分配数据方式可分为:
滚动窗口(Tumbling Windows):窗口之间没有重叠,也没有间隔,是连续的;
滑动窗口(Sliding Windows):大小是固定的,但窗口之间不是首尾相接的;
会话窗口(Session Windows):有会话超时时间,对数据进行分组的;
全局窗口:全局有效。
C. 窗口函数:分增量聚合函数(Reduce和Aggregate)和全窗口函数(Process)。
D. 窗口触发器和移除器:
可参考:Flink官方文档