总结Structured Streaming中的输出模式Output Mode和触发器Trigger。

输出模式Output Mode

Structured Streaming 中有几种类型的输出模式:

  • Append mode: Append模式。默认。只将自上次触发以来添加到结果表中的行输出到接收器
  • Update mode: Update模式。只将自上次触发以来结果表中更新的行输出到接收器
  • Complete mode: Complete模式。每次触发后,都会将整个结果表输出到接收器。只适用于聚合查询。

查询类型

支持的输出模式

注意

聚合查询:带WaterMark的EventTime聚合

如: GlobalAgg、WindowAgg

Append、Update、Complete

Append 模式

1. Append模式用WaterMark删除旧的聚合状态。

2. 仅在WaterMark >= Window End Time时,输出一次最终结果到结果表并写入到接收器。


Update 模式

1. Update模式用WaterMark删除旧的聚合状态。

2. 只要WaterMark < Window End Time, 就会触发聚合计算并输出。


Complete 模式

1. Complete模式不会删除旧的聚合状态。

2. 不论数据迟到多久,都会触发聚合计算。

聚合查询:不带WaterMark的聚合

如: GlobalAgg、WindowAgg

Update、Complete

由于没有WaterMark,不会删除旧的聚合状态。

Join查询

Append

目前只支持Append模式。

MapGroupsWithState

Update

FlatMapGroupsWithState

Append、Update

1. Append模式下,在flatMapGroupsWithState之后,可再有聚合操作。


2. Update模式下, 在flatMapGroupsWithState之后,不允许再有聚合操作。

其他查询(非聚合查询)

Append、Update

不支持Complete模式,将所有未聚合的数据都保留在结果表中是不可行的。

触发器Trigger

触发器决定了多久执行一次查询并输出结果。

Trigger类型

使用

注意

Fixed Interval micro-batch(固定间隔的微批)

Trigger.ProcessingTime(long interval, TimeUnit timeUnit)

1. 没有明确指明触发器时,默认使用该触发器,即Trigger.ProcessingTime(0L), 表示将尽可能快地执行查询。


2. 该模式下,将按用户指定的时间间隔启动微批处理。


3. 如果前一个微批在该间隔内完成,则引擎将等待该间隔结束,然后再开始下一个微批处理。


4. 如果前一个微批花费的时间比间隔要长,下一个微批将在前一个微批处理完成后立即开始。


5. 如果没有新数据可用,则不会启动微批处理。

One-time micro-batch (一次性微批)

Trigger.Once()

仅执行一个微批处理来处理所有可用数据,然后自行停止。适用于一次性作业。

Continuous with fixed checkpoint interval(连续处理)

Trigger.Continuous(long interval, TimeUnit timeUnit)

以固定的Checkpoint间隔(interval)连续处理。在这种模式下,连续处理引擎将每隔一定的间隔(interval)做一次checkpoint,可获得低至1ms的延迟。