Apache Flink 学习笔记:
1.从apache flink官网开始学习flink,一个新的分布式实时流、批处理计算框架。像spark一样同时支持大数据批处理与近实时流处理。而storm仅支持近实时流处理,且吞吐量不如spark
streaming.flink要比storm在实时流处理上有更好的性能,具有更低的延迟,更高的吞吐量,有状态的操作等。所以阿里巴巴选择的是flink,并在最近开源了自家基于flink研发的blink。
2.学习flink一些概念。学习其编程模型、分布式架构。
编程模型:
1)Levels of Abstraction,抽象层级别,从高到低分别为:SQL、Table API、 DataStream API/DataSetAPI、Stateful Stream Processing.编程核心就是
DataStream API/DataSet API.
2)Parallel Dataflows,并行数据流,无论是有界流还是无界流,在执行任务计算 时都会被划分成一个或多个流分区,每个任务运算操作都会有一个或多个
子任 务,子任务数量就是其运算操作的并行度。
3)Windows,视窗,很像storm trident中的window,可按时间驱动(10s)或数据驱 动(200条数据)来划分数据处理批次,也分为tumbling windows(滚动窗,
数据 不重叠)和sliding windows(滑动窗,数据重叠),session windows(会话窗, 不活跃的间隔数据)
4)Time,流程序中的时间,有事件时间(具体时间创建的时间)、摄取时间 (flink 获取事件的时间)、处理时间(flink中处理事件的时间)
5)Stateful Operations,有状态操作,一般一个操作仅查看一次一个单独的事件 ,但有的操作会一次记住多个事件的信息(比如窗口操作符),keyBy操作等,这些
操作就是有状 态的。
6)Checkpoints for Fault Tolerance,容错检查点,Flink使用流重放和检查点的组合实现容错。与spark类似,而storm是通过事务容错。
Batch on Streaming,流批处理,通过DataSet API来批处理有界流。
分布式架构:
7)JobManagers:集群管理器,master进程,负责安排任务,协调检查点,协调故障恢复等,一个集群一般设置多个,一个leader,其他备用,实现高度容错
8)TaskManagers:任务管理器,worker进程,执行任务(或者更具体地说,子任务)的数据流,以及缓冲器和交换数据流。
9)Clinet,客户端,提交相关命令到集群,执行任务
10)Task Slots and Resources,任务槽及资源。每个TaskManager,都是JVM中的一个进程,而任务槽就是TaskManager固定资源子集,多个任务槽共用一个JVM资源,平均划分。一般
任务槽数据等于CPU核心数。多个任务间可共享插槽,提高资源利用率
11)State Backends,状态后端,保存流处理操作状态的数据结构,内存中的hash映射表,或是RocksDB的键值对存储。还能取得状态的时间点快照,该快照存储为check point的一部
分。
12)Savepoints,保存点。由用户手动创建,可以从客户端命令创建,然后基于Stream API程序会从该保存点继续执行或更新flink集群状态。