Flink Time
基础概念
支持三种时间概念:
- Processing Time 时间递增
- Ingestion Time : 摄入时间,数据进入Flink框架的时间,在Source Operator中设置,每个事件拿到当前时间作为时间戳,后续的时间窗口基于该时间
- Event Time 支持一定程度的乱序
上一个 checkpoint 或者 savepoint 进行重放,是不是希望结果完全相同。如果希望结果完全相同,就只能用 Event Time;如果接受结果不同,则可以用 Processing Time。
watermark
一个watermark 代表了 watermark所包含的timestamp 数值,表示后来的数据已经再也没有小于或等于这个时间的了.
Flink 支持两种 watermark 生成方式:
- 在SourceFunction中产生
collectWithTimestamp 方法发送一条数据
第一个参数就是我们要发送的数据
第二个参数就是这个数据所对应的时间戳
emitWatermark 去产生一条 watermark: 表示接下来不会再有时间戳小于等于这个数值记录
- 在使用DataStream API 的时候指定
DataStream.assignTimestampsAndWatermarks
建议生成的工作越靠近 DataSource 越好。这样会方便让程序逻辑里面更多的 operator 去判断某些数据是否乱序。
code demo:
object WaterMakerTest {
def main(args: Array[String]): Unit = {
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
env.setParallelism(1)
val dataStream: DataStream[Order] = env.socketTextStream("localhost", 9999).map(item => {
val itemArray = item.split(",")
Order(itemArray(0).toLong, itemArray(1), itemArray(2).toDouble)
})
val outputStream: DataStream[Order] = dataStream.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[Order](Time.seconds(0)) {
override def extractTimestamp(element: Order): Long = element.timestamp * 1000L
}).keyBy("category").timeWindow(Time.seconds(5)).apply(new MyWindowFunction)
dataStream.print("Data")
outputStream.print("Result")
env.execute()
}
}
class MyWindowFunction extends WindowFunction[Order, Order, Tuple, TimeWindow] {
override def apply(key: Tuple, window: TimeWindow, input: Iterable[Order], out: Collector[Order]): Unit = {
val timestamp = window.maxTimestamp()
var sum: Double = 0
for (elem <- input) {
sum += elem.price
}
val category = key.asInstanceOf[Tuple1[String]].f0
out.collect(Order(timestamp, category, sum))
}
}
case class Order(timestamp: Long, category: String, price: Double)
总结
主要了解Flink的时间概念以及Watermark的作用,它可以处理乱序数据,通过watermark来定义关窗的时间点. 可以在SourceFunction和DataStream API 指定生成 Watermark.
Flink Time的更多相关文章
- apache flink 入门
配置环境 包括 JAVA_HOME jobmanager.rpc.address jobmanager.heap.mb 和 taskmanager.heap.mb taskmanager.number ...
- Flink 1.1 – ResourceManager
Flink resource manager的作用如图, FlinkResourceManager /** * * <h1>Worker allocation steps</h1 ...
- Apache Flink初接触
Apache Flink闻名已久,一直没有亲自尝试一把,这两天看了文档,发现在real-time streaming方面,Flink提供了更多高阶的实用函数. 用Apache Flink实现WordC ...
- Flink - InstanceManager
InstanceManager用于管理JobManager申请到的taskManager和slots资源 /** * Simple manager that keeps track of which ...
- Flink – window operator
参考, http://wuchong.me/blog/2016/05/25/flink-internals-window-mechanism/ http://wuchong.me/blog/201 ...
- Flink – Trigger,Evictor
org.apache.flink.streaming.api.windowing.triggers; Trigger public abstract class Trigger<T, W e ...
- Flink - RocksDBStateBackend
如果要考虑易用性和效率,使用rocksDB来替代普通内存的kv是有必要的 有了rocksdb,可以range查询,可以支持columnfamily,可以各种压缩 但是rocksdb本身是一个库,是跑在 ...
- Flink - state管理
在Flink – Checkpoint 没有描述了整个checkpoint的流程,但是对于如何生成snapshot和恢复snapshot的过程,并没有详细描述,这里补充 StreamOperato ...
- Flink - state
public class StreamTaskState implements Serializable, Closeable { private static final long serial ...
- Stream Processing for Everyone with SQL and Apache Flink
Where did we come from? With the 0.9.0-milestone1 release, Apache Flink added an API to process rela ...
随机推荐
- CentOS 进入救援模式
因某些修改操作,导致系统重启后无法正常启动,此时需要进入救援模式,修复错误配置即可. 1.重启系统后,进入grup引导页面,选中第一项然后按"e" 进入编辑模式: 2.通过↓键找到 ...
- layui表格中格式化日期
layui表格中格式化日期 //1.引入 util layui.use(['table', 'admin'], function () { var util = layui.util; //2.表格内 ...
- k8s新版本使用container而不是docker
使用 Harbor 仓库作为 Kubernetes 集群私有仓库 Harbor 仓库信息 内网地址:hub.rainsc.com IP 地址:192.168.66.100 问题背景 在许多版本的教程中 ...
- 微信小程序 BLE 基础业务接口封装
写在前面:本文所述未必符合当前最新情形(包括蓝牙技术发展.微信小程序接口迭代等). 微信小程序为蓝牙操作提供了很多接口,但在实际开发过程中,会发现隐藏了不少坑.目前主流蓝牙应用都是基于低功耗蓝牙(BL ...
- Ubuntu 切换显示管理器
比较流行的显示管理器有: gdm3 - GNOME Display Manager lightdm - Light Display Manager sddm - Simple Desktop Disp ...
- PLC 入口
教程 全网最全西门子S7-1500PLC视频教程, https://www.bilibili.com/video/BV1Yi4y1U7Md?p=12&vd_source=7f5dfe09aaa ...
- 欢迎加入d3shop,一个DDD实战项目
背景 整个<老肖的领域驱动设计之路>系列关于认知的核心部分已经基本闭环,但纸上得来终觉浅,还是需要通过实际操作来体会和验证我们的观点,接下来,我将通过一个实战项目来带着大家一起体验从需求到 ...
- Angular 学习笔记 (消毒 sanitizer)
refer : https://www.intricatecloud.io/2019/10/using-angular-innerhtml-to-display-user-generated-cont ...
- Servlet——Tomcat8以前解决中文乱码问题
Request 请求参数中文乱码问题 // 1.解决乱码问题:POST,getReader() request.setCharacterEncoding("UTF-8&quo ...
- 2024年常用的Python可视化框架及开源项目
以下是 2024 年一些较为流行的 Python 可视化框架及开源项目: Matplotlib 框架声明:是 Python 中最基础.最广泛使用的可视化库之一,用于创建各种静态.动态和交互式图表. 官 ...