Flink源码分析-Watermark
简介
窗口机制是Flink流处理的核心,它将无限的流元素分割成有限的窗口。当一个窗口不再增加新元素时,就可以对这个窗口中的所有元素执行计算逻辑。而判断窗口不会再增加新元素的方式有:时间(Watermark)、计数、自定义。其中Watermark
代表事件发生时的时间戳或者Flink收到事件时的时间戳。
窗口机制是Flink流处理的核心,它将无限的流元素分割成有限的窗口。当一个窗口不再增加新元素时,就可以对这个窗口中的所有元素执行计算逻辑。而判断窗口不会再增加新元素的方式有:时间(Watermark)、计数、自定义。其中Watermark
代表事件发生时的时间戳或者Flink收到事件时的时间戳。
当某个operator执行需要很长时间的话,使用异步操作对吞吐量的提升非常有帮助。
Flink Job有三种部署模式:
LAZY_FROM_SOURCES
仅当Task的上游都产生数据之后,才会真正的部署Task。LAZY_FROM_SOURCES_WITH_BATCH_SLOT_REQUEST
与LAZY_FROM_SOURCES
逻辑基本一致。不同的是在申请Slot的时候有超时时间限制。EAGER
ExecutionGraph在被调度时会将所有Task一次性到各个TaskManager。Flink中的容错,一致性语义都是靠State来实现的。
State需要结合Checkpoint,Snapshot才能发挥作用。
State 可以按照维度进行划分:
类型:
数据组织格式:
Flink以DAG的方式来执行程序,它会根据用户的代码生成三个Graph,但我认为实际上还有一个Graph,就是用户的程序直接映射出来的。
CheckpointCoordinator会启动一个定时任务触发checkpoint
窗口机制是Flink流处理的核心,它将无限元素的流分割成有限元素的集合(窗口)。当一个窗口不再增加新元素时,就可以对这个窗口中的所有元素执行计算逻辑。
将一条消息从被Flink job消费到最后被sink下来的整个过程划分成两部分,算子的逻辑处理、task之间的消息传递。其中算子的逻辑处理需要用户参与,task之间的消息传递一般是不需要用户参与的,但是了解其实现过程,对理解Flink的原理是非常有帮助的。