这是我参与「第四届青训营 」笔记创作活动的第4天
1. 流式计算与批式计算
a. 数据存储:批式计算-HDFS、Hive;流式计算-Kafka、Pulsar
b. 数据时效性:批式计算-天级别;流式计算-分钟级别
c. 准确性:批式计算-精准;流式计算-精准和时效性之间取舍
d. 典型计算引擎:批式计算-Hive、Spark、Flink;流式计算-Flink
e. 计算模型:批式计算-Exactly Once;流式计算-At least Once或Exactly Once
f. 资源模型:批式计算-定时调度;流式计算-长期持有
2. Watermark
含义:系统认为的当前真实的事件时间
生成:可以通过Watermark Generator来生成
传递:取上游所有subtask的最小值
部分数据断流: ldle Source
迟到数据处理: Window算子是丢弃;Join算子认为跟之前的数据无法join到
3. Window
3.1 window分类
3.1.1 Tumble Window(滚动窗口)
窗口划分:1. 每个key单独划分;2. 每条数据只会属于—个窗口
窗口触发:Window结束时间到达的时候一次性触发
3.1.2 Sliding Window(滑动窗口)
窗口划分:1. 每个key单独划分;2. 每条数据可能会属于多个窗口
窗口触发:Window结束时间到达的时候一次性触发
3.1.3 Session Window (会话窗口)
窗口划分:
1.每个key单独划分
2.每条数据会单独划分为一个窗口,如果window之间有交集,则会对窗口进行merge
窗口触发:
Window结束时间到达的时候─次性触发
3.2 迟到数据处理
1.Allow lateness
这种方式需要设置一个允许迟到的时间。设置之后,窗口正常计算结束后,不会马上清理状态,而是会多保留allowLateness这么长时间,在这段时间内如果还有数据到来,则继续之前的状态进行计算。
适用于: DataStream、SQL
2.SideOutput(侧输出流)
这种方式需要对迟到数据打一个tag,然后在DataStream上根据这个tag获取到迟到数据流,然后业务层面自行选择进行处理。
适用于: DataStream
3.3 增量计算与全量计算
1.增量计算:
Ø 每条数据到来,直接进行计算,window只存储计算结果。比如计算sum,状态中只需要存储sum的结果,不需要保存每条数据。
Ø 典型的reduce、aggregate等函数都是增量计算。
Ø SQL中的聚合只有增量计算。
2.全量计算:
Ø 每条数据到来,会存储到window的state中。等到window触发计算的时候,将所有数据拿出来一起计算。
Ø 典型的process函数就是全量计算。