一. 简介
“Apache Flink 是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架;Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。
注:在 flink 的世界观中,一切都是由流组成的,离线数据是有界限的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流。(一个在流模式执行的作业可能会产生增量更新(想想数据库中的插入(upsert)操作),而批作业只在最后产生一个最终结果。)
二. 核心Api
- DataStreamApi(无界,有界,实时)以及 DataSet API(有界,离线,批处理)
- Table API
- SQL
三. Flink 运行架构
- 作业管理器(JobManager)
- 资源管理器(ResourceManager)
- 任务管理器(TaskManager)
- Client 为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境
连通即可)。提交 Job 后,Client 可以结束进程(Streaming 的任务),也可以不
结束并等待结果返回。
- JobManager 主 要 负 责 调 度 Job 并 协 调 Task 做 checkpoint, 职 责 上 很 像
Storm 的 Nimbus。从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的
执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。
- TaskManager 在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个
Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自
己的上游建立 Netty 连接,接收数据并处理。
-
subtask是Flink中任务执行最小单元
-
Slot是Flink中资源计算隔离的单元,一个slot中可以运行多个subTask,这些subTask必须是来自同一个job的不同task的subtask;而一个 TaskManager 多个 slot 意味着更多的subtask 可以共享同一个 JVM
四. 内容
- 执行图
- 并行度
- 任务链
五. 传统数据处理结构(实时性很好)--为什么使用Flink
- 缺点:请求量太大, 处理不了大数据,联表查询代价太高
分析处理架构:
六. 流与批的世界观
- 流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理。
- 批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久化到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点 七. Checkpoint原理剖析与应用实践
1.checkPoint理解
- checkPoint是从source触发到下游所有节点完成的一次全局操作
- state其实就是checkPoint所作的主要持久化备份的主要数据
- states分类
- keyed state :只能应用于KeyedStream的函数与操作中,例如Keyed UDF,windows states;keyed states试衣镜分区/划分好的,每一个key只能属于某一个keyed state
- operator state:每一个operator state都仅与一个operator的实例绑定
- Managed state:由Flink管理的state,flink推荐使用Manage state
- statebackend分类
- MemoryStateBackend,运行时存储在java heap
- FsStateBackend,运行时存储在java heap;只有在checkpoint,才会将数据以文件格式持久化到远程存储上.
- RocksDBStateBackend,借用了RocksDB(内存磁盘混合的LSM DB)对state进行存储
4.执行机制
- 第一步,checkPoint Coordinator向所有的source节点trigger Check-point
- 第二步,source节点向下游广播barrier,这个barrier就是实现Chandy-Lamp-ort分布式快照算法核心,下游的task只有收到所有input的barrier才会执行相应的CheckPont
- 第三步,当task完成state备份后,会将备份的数据地址通知给Checkpoint coordinator
- 第四步,下游的sink节点收集齐上游input的barrier之后,会执行本地快照
- 第五步,sin节点在完成自己的checkpoint之后,会将state handle返回通知给coordinator
- 第六步,当checkpoint coordinator收集齐所有task的state handle,就认为这一次的checkpoint全局完成了,再向持久化存储中备份一个Checkpoint meat文件
5.checkpont的exactly_once语义
- 为了实现exactly_once语义,flink通过一个input buffer将在对齐阶段收到的数据缓存起来,等对齐完成之后在进行处理. 注:flink的checkpoint机制只能保证flink计算过程中可以做到exactly once,端到端的exactly once需要source和sink支持.
七. 详解Metrics原理和实战
1.什么是Metrics
- 在Flink内部收集一些指标,通过这些指标,让开发人员更好的理解作业或者集群的状态. 七. Web-Ui
- 指定上传jar路径: web.upload.dir: /test