您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Flink Watermark在任务之间如何进行传递
## 一、Watermark的核心作用
在Apache Flink的流处理引擎中,Watermark是一种特殊的时间戳机制,用于解决乱序事件的处理问题。其主要作用包括:
1. 标识事件时间进度
2. 触发窗口计算
3. 推动时间相关的操作执行
## 二、任务间的传递机制
### 1. 单任务内部生成
```java
DataStream<String> stream = env.addSource(...);
stream.assignTimestampsAndWatermarks(
WatermarkStrategy
.<String>forBoundedOutOfOrderness(Duration.ofSeconds(5))
.withTimestampAssigner(...)
);
当数据流经过算子链(Operator Chain)时: - 链内传递:通过内存直接传递,不经过序列化 - 跨节点传递:需要序列化后通过网络传输
特性 | 说明 |
---|---|
广播传播 | 所有子任务继承父任务Watermark |
单播传播 | 取所有输入通道的最小值 |
对齐机制 | 确保下游算子时间进度一致 |
对于CoProcessFunction
等多输入算子:
public void processWatermark1(Watermark mark) {
long newMin = Math.min(mark.getTimestamp(), watermark2);
output.emitWatermark(new Watermark(newMin));
}
在迭代反馈环中,Watermark会被特殊处理: - 反馈通道自动截断时间推进 - 防止无限等待旧数据
setAutoWatermarkInterval
WatermarkLag
指标注意:在Flink 1.12+版本中,Watermark传播机制经过优化,网络传输时不再需要特殊序列化处理,显著降低了性能开销。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。