-
Lambada:实时数据处理(Storm、Spark Streaming)+全量数据处理(MapReduce、Spark)。
-
实时+全量的架构统一:将数据切分成微批的处理模式进行流式数据处理。
-
数据产生的本质,其实是一条条真实存在的事件。事件时间(Event Time)+水位线(Watermark)-> 保证:有序。
-
有序性:watermark有个参数允许延迟时间,举例:窗口大小=10s,容忍允许延迟时间=5s。
当事件时间>=10:08:08 00:00:10的事件到时,Flink不认为事件时间=[10:08:08 00:00:00, 10:08:08 00:00:10)事件都到了。
当事件时间>=10:08:08 00:00:15的事件到时,Flink会认为事件时间=[10:08:08 00:00:00, 10:08:08 00:00:10)事件都到了(虽然有可能还有数据没到,但是不等那些了)。
-
支持有状态计算(中间结果缓存)保证:高效。(迭代计算)
-
高度灵活的窗口(Windows)操作保证:一定范围的聚合计算。
-
聚合计算。
-
窗口类型:
-
业务维度划分:
- 时间维度划分(TimeWindow:固定时间长度划分窗口,比如 5s一个窗口)
- 空间维度划分(CountWindow:固定个数的事件为单位划分窗口,比如2个事件一个窗口)
-
移动方式划分:
- 滚动窗口:将事件分配到长度固定且不重叠的桶中。(滚动计数窗口 和 滚动时间窗口)
- 滑动窗口:将事件分配到大小固定且允许相互重叠的桶中,这意味着每个事件有可能同时属于多个桶。要指定窗口的长度和滑动间隔来定义滑动窗口。(**时间滑动窗口 ** 和 计数滑动窗口)
-
会话窗口(Session Windows)主要是将某段时间内活跃度较高的数据聚合成一个窗口进行计算,窗口的触发的条件是 Session Gap,是指在规定的时间内如果没有数据活跃接入,则认为窗口结束,然后触发窗口计算结果。Session Windows 不需要有固定 windows size 和 slide time,只需要定义 session gap,来规定不活跃数据的时间上限即可。
-
Time时间:
- 事件时间:每个事件在其生产设备上发生的时间,是事件的属性之一。
- 摄入时间:是事件进入Flink的时间。
- 处理时间:Flink处理事件记录时,当前的系统时间。
-
轻量级分布式快照(State Snapshot),执行状态信息持久化存储,任务异常可以从Checkpoints中进行任务自动恢复,保证:数据处理过程一致性。(容错:fault tolerance->exactly-once语义)
-
Flink序列化/反序列化将所有数据对象转换成二进制在内存中存储,提升内存利用率,降低JVM GC,保证稳定性。
-
Save Points(保存点):任务执行快照保存在存储介质上,当任务重启时可以直接从事先保存的Save Points恢复原有计算状态。
-
exactly-once语义:At Least Once 可以保证数据不丢失,At Most Once 可以保证数据不重复。exactly-once语义保证既不丢失,也不重复。At Least Once + 幂等性 = Exactly Once
-
Task slot是Flink中最小的资源单位。假如一个taskManager有3个slot,他就会给每个slot分配1/3的内存资源,目前slot不会对cpu进行隔离。同一个taskManager中的slot会共享网络资源和心跳信息。