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 ...
随机推荐
- udp协议及包格式
UDP协议也是互联网基础协议之一.它和TCP一样同属于传输层当中的一个协议. 不过UDP协议是一个面向无连接的协议(TCP是向面连接的协议).一个UDP连接的建立,不必象TCP协议那样需要服务器端侦听 ...
- 【原创】VSCode 快捷键汇总(已整理成一张 A4 纸大小,方便打印)
由于经常记不住 VSCode 的快捷键,每次查找不方便,于是乎做了一份 VSCode 快捷键汇总,已整理成一张 A4 纸大小,方便打印,这样查找就直观多了~ 直接保存图片,横向打印即可.
- 一个.NET开源、免费的跨平台物联网网关
前言 今天大姚给大家分享一个基于.NET开源.免费的跨平台物联网网关:IoTGateway. 项目介绍 IoTGateway是一个基于.NET6的跨平台物联网网关.通过可视化配置,轻松的连接到你的任何 ...
- 折腾 Quickwit,Rust 编写的分布式搜索引擎 - 可观测性之分布式追踪
概述 分布式追踪是一种跟踪应用程序请求流经不同服务(如前端.后端.数据库等)的过程.它是一个强大的工具,可以帮助您了解应用程序的工作原理并调试性能问题. Quickwit 是一个用于索引和搜索非结构化 ...
- FFmpeg开发笔记(五十)聊聊几种流媒体传输技术的前世今生
自从互联网普及之后,用于视频直播的流媒体技术就发展起来.这几十年中,比较有影响的主要有MMS.RTSP.RTMP.HLS.SRT.RIST几种,分别介绍如下. 1.MMS协议 MMS全称Micros ...
- SQL Server使用脚本实现自动备份
因服务器安装的SQL Server版本不支持自动定时备份,需自行实现,大概思路为: 创建备份数据库的脚本 创建批处理脚本执行步骤一中的脚本 创建Windows定时任务执行步骤二中的脚本 1. 创建SQ ...
- 神经网络之卷积篇:详解简单卷积网络示例(A simple convolution network example)
详解简单卷积网络示例 假设有一张图片,想做图片分类或图片识别,把这张图片输入定义为\(x\),然后辨别图片中有没有猫,用0或1表示,这是一个分类问题,来构建适用于这项任务的卷积神经网络.针对这个示例, ...
- sql 分组查询并新增序号
在SQL中,你可以使用ROW_NUMBER()函数来为结果集中的每一行新增一个序号.这个序号是基于某个排序条件的分区排序结果. 以下是一个简单的例子,假设我们有一个名为students的表,它有两列: ...
- 自定义 AuthenticationProvider ,UserDetailsService的实现类@Autowired 为null
项目场景: 整合spring security OAuth2自定义AuthenticationProvider 登录认证 签发token 问题描述: 在自定义 AuthenticationProvid ...
- 《赵渝强》《Docker+Kubernetes容器实战派》新书上市!!!
用一本书掌握Docker与Kubernetes核心内容!!! 本书基于作者多年的教学与实践经验编写,分为上下两篇,共20章. 上篇(第1-11章)介绍Docoker,包含:Docker入门.Docke ...