-----Flink
1、个人理解:Flink也好,Spark也好,将我们原本需要实现的功能以框架的形式封装好,然后我们如果使用Flink,直接从业务的角度出发,多关心业务,就可以使用。
基本架构图:Flink系统主要由两个组件组成,分别为JobManager和TaskManager,Flink的架构也遵循Master-Slave架构设计原则,JobManager和Master节点,TaskManager为Worker(Slave)节点,所有组件之间的通信都是借助于Akka Framework
Client客户端
客户端负责将任务提交到集群,与JobManager构建Akka连接,然后将任务提交到JobManager,通过和JobManager之间进行交互获取任务执行状态。客户端提交任务可以采用CLI方式或者通过使用Flink WebUI提交,也可以在应用程序中指定JobManager的RPC网络端口构建ExecutionEnvironment提交Flink应用。
JobManager
JobManager负责整个Flink集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中TaskManager上TaskSlot的使用情况,为提交的应用分配相应的TaskSlots资源并命令TaskManager启动从客户端中获取的应用。JobManager相当于整个集群的Master节点,且整个集群中有且仅有一个活跃的JobManager,负责整个集群的任务管理和资源管理。JobManager和TaskManager之间通过Actor System进行通信,获取任务执行的情况并通过Actor System将应用的任务执行情况发送给客户端。同时在任务执行过程中,Flink JobManager会触发Checkpoints操作,每个TaskManager节点收到Checkpoint触发指令后,完成Checkpoint操作,所有的Checkpoint协调过程都是在Flink JobManager中完成。当任务完成后,Flink会将任务执行的信息反馈给客户端,并且释放掉TaskManager中的资源以供下一次提交任务使用。
TaskManager
TaskManager相当于整个集群的Slave节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。客户端通过将编写好的Flink应用编译打包,提交到JobManager,然后JobManager会根据已经注册在JobManager中TaskManager的资源情况,将任务分配给有资源的TaskManager节点,然后启动并运行任务。TaskManager从JobManager接收需要部署的任务,然后使用Slot资源启动Task,建立数据接入的网络连接,接收数据并开始数据处理。同时TaskManager之间的数据交互都是通过数据流的方式进行的,TaskManager中资源调度的最小单位是任务slot。TaskManager中任务slot的数量指示并发处理任务的数量。请注意,多个operator可以在一个任务slot中执行。
2、分布式流处理开源框架
- 保证乱序数据的准确性
- 容错机制,可以无缝的从失败中恢复,并且可以保证精准恢复
- 大规模分布式
- 批流一体
- Flink有状态,可以保持已经处理过的数据
- Flink支持流处理和窗口事件时间语义
- 高吞吐量低延迟
- Flink保存点提供版本控制机制,从而能够更新应用程序,加工历史数据没有丢失并最小的停机时间
- 基于JVM独立的内存管理
3、Flink流处理流程:Stream Dataflow,从数据源提取数据的操作叫做Source Operator,中间的计算过程统称为Tranformation Operators ,最后结果数据流被称为 sink Operators
4、名次解释
- slot:TaskManager 为了对资源进行隔离和增加允许的task数,引用slot的概念,对内存进行隔离,策略是均分,是指TaskManager的并发执行能力,每个slot可以执行job的一整个pipeline
- 并行度:是指TaskManager实际使用的并发能力,不能多于slot的个数
- 水位线理解以及计算应用:
- 理解:水位线是一种衡量Event Time进展的机制,用来处理实时数据中的乱序问题,通常水位线和窗口结合使用来实现的。乱序数据进行窗口处理时,不能无限等待延迟数据到达,当到达特定watermark时,认为在watermark之前的数据已经全部到达并触发窗口计算(即使后面可能还有延迟的数据,也不等了)
- 计算公式: watermark = 进入 Flink 窗口的最大的事件时间(maxEventTime)— 指定的延迟时间(t)
- 计算实例:模拟向kafka发送30条,数据一秒一条,设置窗口为滑动窗口,大小2s,滑动1s,水位线10s,实际计算结果数据为20条,由于发送数据的最大的事件时间没有到达特定的watermark时间,没有触发窗口计算
输入数据:
输出数据:
5、不同部署模式:Standalone以及On Yarn
- onyarn模式任务提交流程
- Yarn Session模式:在YARN之上部署了Flink Session集群(可屏蔽底层不同的运行环境),向Yarn Session集群提交作业(不与YARN交互),多个作业共用集
- Per Job模式:作业直接提交到YARN上(与YARN交互),一个作业对应一个JobManager,资源隔离
- Standalone Cluster
- Master-Slave架构,JobManager运行在Master节点,TaskManager运行在Slave节点,与HDFS/Hadoop无关,Active JobManager挂掉时,通过Zookeeper选举多个Standby JobManager成为Active JobManager来保证高可用