Flink Watermark传播机制
2026/6/12 12:45:00 网站建设 项目流程

flink应用程序会以数据流图的形式来调度执行。Watermark如何在不同算子传播呢?下面分单并行数据流和多并行数据流来分别说明。
Watermark传播策略满足以下规律:

  1. 上游算子中的Watermark以广播形式发送到下游算子。可以在Output接口的emitWatermark(Watermark mark)的注释看到。当调用该方法发送水位线时,将以广播Watermark方式发送到下游算子。
/** * A {@link org.apache.flink.streaming.api.operators.StreamOperator} is supplied with an object of * this interface that can be used to emit elements and other messages, such as barriers and * watermarks, from an operator. * * @param <T> The type of the elements that can be emitted. */@PublicEvolvingpublicinterfaceOutput<T>extendsCollector<T>{/** * Emits a {@link Watermark} from an operator. This watermark is broadcast to all downstream * operators. * * <p>A watermark specifies that no element with a timestamp lower or equal to the watermark * timestamp will be emitted in the future. */voidemitWatermark(Watermarkmark);/** * Emits a record to the side output identified by the given {@link OutputTag}. * * @param record The record to collect. */<X>voidcollect(OutputTag<X>outputTag,StreamRecord<X>record);voidemitLatencyMarker(LatencyMarkerlatencyMarker);}


2.当数据流中Watermark的值为Long.MAX_VALUE时,表示数据流结束,不会有后续数据产生,相当于一个终止标志。可以在Watermark源码看到,定义的MAX_WATERMARK=Long.MAX_VALUE,标识事件时间的终止(end-of-event-time)。

/** The watermark that signifies end-of-event-time. */publicstaticfinalWatermarkMAX_WATERMARK=newWatermark(Long.MAX_VALUE);
  1. 对同一条数据流(输入管道),不管是多并行还是单并行,它被下游算子接收后,会取当前流最大的Watermark作为当前管道的Watermark输入
    一般来说,StreamTaskInput接口代表算子的输入,其中StreamTaskNetworkInput是它的实现类,代表从网络中获取的输入。StreamTaskNetworkInput类中的processElement方法

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询