1. 空闲等待
1.1 空闲等待
多并行度的flink作业,watermark水位线的传递遵循接收到上游多个水位线时取最小、往下游多个子任务发送水位线时进行广播。此时,如果有其中一个子任务没有数据,导致当前Task的水位线无法推进,窗口无法触发,需要等待上游最小的水位线达到触发时间。于是,flink添加了空闲等待的设置
1.2 withIdleness
在设置WatermarkStrategy时,添加.withIdleness(Duration.ofSeconds(5))
WatermarkStrategy<WaterSensor> waterSensorWatermarkStrategy = WatermarkStrategy
//升序的watermark,没有等待时间
.<WaterSensor>forGenerator(new WatermarkGeneratorSupplier<WaterSensor>() {
@Override
public WatermarkGenerator<WaterSensor> createWatermarkGenerator(Context context) {
return new MyWatermark<>(Duration.ofSeconds(3));
}
})
//指定时间戳分配器,从数据中提取时间戳
.withTimestampAssigner(new SerializableTimestampAssigner<WaterSensor>() {
@Override
public long extractTimestamp(WaterSensor element, long recordTimestamp) {
System.out.println

最低0.47元/天 解锁文章
4509

被折叠的 条评论
为什么被折叠?



