流式计算中的window计算| 青训营笔记

106 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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函数就是全量计算。