Flink 两种发送自定义的timestamp以及watermark的方式
来源:互联网 发布:网络前端的发展 编辑:程序博客网 时间:2024/06/17 13:46
Flink提供了抽象类来让开发者赋值自己的时间戳并发送他们自己的Watermark。更具体来说,开发者需要依照不同用例情况来实现接口AssignerWithPeriodicWatermarks或接口AssignerWithPunctuatedWatermarks。简而言之,前一个接口将会周期性发送Watermark,而第二个接口根据一些到达数据的属性,例如一旦在流中碰到一个特殊的element便发送Watermark。
为了进一步简化开发者开发类似的task,Flink自带了一些预先实现的timestamp assigner。本节提供了它们的一个列表。除过引用即用的函数,这些预先实现的assigner还可以作为自定义assigner的实现示例。
递增时间戳的Assigner
最简单的周期性Watermark生成的特例便是由一个给定的Source task所见的时间戳都以递增顺序发生的情况。在这种情况下,由于不会有比当前时间戳更早的时间戳到达,故总是可以将当前时间戳看作是一个Watermark。
注意上述情况仅在每个并行数据源task的时间戳都是以递增顺序到达时才是必要的(应当是必要条件?--翻译不确定),例如,在某特定部署中,一个Kafka分区是由一个并行性数据源读取的,那么上述情况仅在每个Kafka分区内的时间戳都是递增顺序出现时才是必要的。Flink的Watermark合并机制保证会在任何并行流在进行shuffle、 union、 connect或merge后都可以生成正确的Watermark。
DataStream<MyEvent> stream = ...
DataStream<MyEvent> withTimestampsAndWatermarks =
stream.assignTimestampsAndWatermarks(new AscendingTimestampExtractor<MyEvent>() {
@Override
public long extractAscendingTimestamp(MyEvent element) {
return element.getCreationTime();
}
});
允许固定量的迟到数据的Assigner
另一个周期性Watermark生成的例子是Watermark落在流中的一个固定时间段内观察到的最大(事件时间的)时间戳的后面。该情况同样包括预先知道在流中将会遇到的最大迟到量(lateness)的情况,例如创建的一个测试用的自定义source中,它的element的时间戳会分布在一个固定的时间段内。Flink为这种情况提供了BoundedOutofOrdernessTimestampExtractor接口,该接口需要参数maxOutofOrderness,即在一个element被给定窗口在计算最终结果时忽略之前(即该element过期前),所允许该element迟到的最大lateness。lateness的值为"t-t_w",其中t是一个element的(事件时间的)时间戳,t_w是前一个watermark。如果lateness > 0,则我们就认为该element已经迟到,并且在job计算对应窗口的结果时忽略它。
DataStream<MyEvent> stream = ...
DataStream<MyEvent> withTimestampsAndWatermarks =
stream.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<MyEvent>(Time.seconds(10)) {
@Override
public long extractAscendingTimestamp(MyEvent element) {
return element.getCreationTime();
}
});
- Flink 两种发送自定义的timestamp以及watermark的方式
- Flink中在source流中自定义timestamp和watermark
- Flink提交作业的两种方式
- Openlaszlo中发送自定义事件的两种方式
- 短信的发送(两种发送方式)
- 十四、Python的自定义排序 以及两种排序方式
- android 发送短信的两种方式,以及接收报告和发送报告
- android 发送短信的两种方式,以及接收报告和发送报告
- 发送HTTP请求的两种方式
- iOS 发送Email的两种方式
- 发送广播的两种方式
- android 发送短信的两种方式
- android 发送短信的两种方式
- android 发送短信的两种方式
- ios-发送信息的两种方式
- ABAP 发送邮件的两种方式
- android 发送短信的两种方式
- android 发送短信的两种方式
- 从后缀表达式建立表达式树
- Ueditor 百度编辑器本地保存
- HTML学习---网页编程(一)HTML基础概述。列表、文字等
- 记录opencv249安装过程中的问题
- Python学习笔记4
- Flink 两种发送自定义的timestamp以及watermark的方式
- notes is better than memory装饰者模式
- 数据库索引的实现原理
- 常用网址
- iOS源码解析—SDWebImage(SDWebImageDownloader)
- 遍历字典
- 用Python和Pygame写游戏-入门
- 编译安装mysql
- matlab GUI axe显示图片后右键显示菜单