翻译来源- Concept Timely Stream Processing

介绍

及时的流处理是有状态流处理的扩展,在计算中时间扮演一些角色。此外,当一个事件发生,当您进行时间序列分析时,基于一定的周期(通常称为窗口)进行汇总时,或者做事件处理时,时间确实是重要的。

在以下各节中,我们将重点介绍在使用及时的Flink应用程序时应考虑的一些问题。

时间概念:事件时间和处理时间

在流式程序中引用时间(例如定义窗口)时,可以引用不同的时间概念:

  • 处理时间:处理时间是指执行相应操作的机器的系统时间。

当流式程序按处理时间运行时,所有基于时间的操作(如时间窗口)将使用运行相应算子的计算机的系统时钟。每小时的处理时间窗口将包括所有到达特定算子的系统时钟指示整小时的时间之间的记录。例如,如果应用程序在9:15 am开始运行,则第一个一小时的处理时间窗口将包括在9:15 am和10:00 am之间处理的事件,下一个窗口将包括在10:00 am和11:00 am之间处理的事件,依此类推。。

处理时间是最简单的时间概念,不需要流和机器之间的协调。它提供了最佳的性能和最低的延迟。但是,在分布式和异步环境中,处理时间不能提供确定性,因为它容易受记录到达系统(例如从消息队列)速度,记录在系统内部算子之间流动速度,以及中断(调度或其他情况)的影响。

  • 事件时间:事件时间是每个事件在事件生产设备上发生的时间。通常在记录进入Flink之前将其嵌入到记录中,并且可以从每个记录中提取事件时间戳。在事件时间中,时间取决于数据,而不取决于任何时钟。事件时间程序必须指定如何生成“事件时间水印”,这是一种表示事件时间进度的机制。该水印机制将在下面的后续部分 中进行介绍。

在理想情况下,事件时间处理将产生完全一致且确定的结果,而不管事件何时到达或它们的顺序如何。但是,除非已知事件是按时间顺序(按时间戳)到达的,否则会在处理事件时间过程中因为等待无序事件导致一定的延迟。由于只能等待有限的时间,因此这限制了事件时间应用程序如何提供确定性。

假设所有数据都已到达,事件时间操作将按预期方式运行,即使在处理无序或迟到的事件或重新处理历史数据时也会产生正确且一致的结果。例如,一个一小时事件时间窗口将包含落入该小时内的带有事件时间戳的所有记录,跟它们到达的顺序或处理时间无关。(有关更多信息,请参见延迟事件部分。)

请注意,有时当事件时间程序实时处理实时数据时,它们将使用一些处理时间操作,以确保它们及时处理。

事件时间和水印

注意:Flink从数据流模型中实现了许多技术。为了对事件时间和水印有一个很好的介绍,请看下面的文章。

支持事件时间的流处理器需要一种方法来衡量事件时间进度。例如,当事件时间超过一小时的结尾时,需要通知一个构建一小时窗口的窗口算子,以便该算子可以关闭正在进行的窗口。

事件时间可以独立于处理时间(由时钟衡量的)进行。例如,在一个程序中,算子的当前事件时间可能会稍微小于处理时间(考虑到事件接收的延迟),而两者均以相同的速度进行。另外一个例子,一个流式程序,通过快速转发已经在Kafka主题(或另一个消息队列)中缓冲的一些历史数据的方式,处理遍布几周的事件时间,但处理本身的时间仅为几秒钟。


Flink中衡量事件时间进度的机制是水印。水印作为数据流的一部分流动,并带有时间戳t。一个水印(t)表明该流的事件时间已经达到时间t,这意味着不应该再有更多来自该流时间戳为 t' <= t的元素(即,比水印更早或相等的带时间戳的事件)。

下图显示了带有(逻辑的)时间戳的事件流,并且水印们按序流动。在此示例中,事件是有序的(对于它们的时间戳),这意味着水印只是流中的周期性标记。

水印对于乱序流至关重要,如下图所示,其中的事件未按其时间戳排序。通常,水印是流中点的一个声明,到某个时间戳的所有事件都应该已到达。一旦水印到达算子,算子就可以将其内部事件时间时钟推进到水印的值。

请注意,新创建的一个(或多个)流元素的事件时间继承自生成它们的事件或触发哪些元素创建的水印。

并行流中的水印

水印在源函数处生成或在源函数之后直接生成。源函数的每个并行子任务通常独立生成各自的水印。这些水印们定义了该特定并行源的事件时间。

随着水印们在流式程序中的流动,它们会推进所到达的算子的事件时间。每当算子推进其事件时间时,都会在下游为后续算子生成新的水印。

某些运算符会消耗多个输入流。例如一个union,或带有keyBy(…)或partition(…)函数的算子。这样的算子的当前事件时间是其输入流的事件时间中的最小值。随着其输入流更新其事件时间,算子也将更新。

下图展示了流经并行流的事件和水印,算子跟踪事件时间的例子。

延迟

某些元素可能会违反水印条件,意思是即使水印(t)已发生,更多带有时间戳t'<=t的元素还会发生。事实上,在许多实际情况中,某些元素可以被任意延迟,使得给所有将要发生的事件指定一个确定的事件时间戳是不可能的。 另外,延迟可以有限度,对水印太多延迟通常也不可取,因为它会在事件时间窗口计算中造成太多的延迟。

因此,流程序可能会明确地知道有晚到的元素。 迟到元素是指系统事件时间时钟(被水印标记)之后到达的元素,系统事件时间时钟已经超过迟到元素的时间戳。参考允许延迟获取更多有关如何在事件时间窗口中使用延迟元素的信息。

窗口

聚合事件(例如,计数、总和)在流上的工作方式与在批处理中不同。例如,不可能计算一个流中的所有元素,因为流通常是无限的(无界的)。相反,流上的聚合(计数、总和等)局限于窗户,例如“数过去5分钟”,或“最后100个元素的总和”.

窗户可以由时间驱动(例如:每30秒)或数据驱动(例如:每100个元素)。人们通常区分不同类型的窗户,例如翻滚的窗户(无重叠),滑动窗(重叠),以及会话窗口(由不活动间隙分割)。

请查看这个博客帖子获取更多窗口示例或查看 DataStream API的窗口文档

Flink Concept Timely Stream Processing -Flink概念及时流处理的更多相关文章

  1. 腾讯大数据平台Oceanus: A one-stop platform for real time stream processing powered by Apache Flink

    January 25, 2019Use Cases, Apache Flink The Big Data Team at Tencent     In recent years, the increa ...

  2. Stream processing with Apache Flink and Minio

    转自:https://blog.minio.io/stream-processing-with-apache-flink-and-minio-10da85590787 Modern technolog ...

  3. 《从0到1学习Flink》—— 介绍Flink中的Stream Windows

    前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...

  4. 使用flink Table &Sql api来构建批量和流式应用(1)Table的基本概念

    从flink的官方文档,我们知道flink的编程模型分为四层,sql层是最高层的api,Table api是中间层,DataStream/DataSet Api 是核心,stateful Stream ...

  5. [源码解析] 当 Java Stream 遇见 Flink

    [源码解析] 当 Java Stream 遇见 Flink 目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java St ...

  6. Flink入门-第一篇:Flink基础概念以及竞品对比

    Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...

  7. Stream Processing 101: From SQL to Streaming SQL in 10 Minutes

    转自:https://wso2.com/library/articles/2018/02/stream-processing-101-from-sql-to-streaming-sql-in-ten- ...

  8. flink学习笔记-快速生成Flink项目

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  9. 使用flink Table &Sql api来构建批量和流式应用(2)Table API概述

    从flink的官方文档,我们知道flink的编程模型分为四层,sql层是最高层的api,Table api是中间层,DataStream/DataSet Api 是核心,stateful Stream ...

  10. Flink监控:Monitoring Apache Flink Applications

    This post originally appeared on the Apache Flink blog. It was reproduced here under the Apache Lice ...

随机推荐

  1. VideoMAE Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training概述

    0.前言 相关资料: arxiv github 论文解读(知乎,CSDN) 论文基本信息: 领域:视频自监督表示学习 发表时间:NeurIPS 2022(2022.3.23) 1.针对的问题 视频存在 ...

  2. 04-python垃圾回收机制

    python垃圾回收机制 一.引入 解释器在执行定义变量的语法时,会申请内存空间来存放变量值,每一块内存空间都有其唯一的内存地址,我们在前面说过,变量名并不是存放的变量值,而是存放的内存地址,通过访问 ...

  3. Bugku-ez_misc[wp]

    题目描述 1.拿到一份abc.rar文件,里面有一个加密call.png (1)通过file  . binwalk . 伪加密一顿小输出都不行,于是放进16进制编辑器查看: 文件头不对! (2)修改为 ...

  4. 青少年CTF-从尾看到头[WP]

    一 题目描述 二 解题步骤 2.1第一层压缩包 压缩包打开提示出错 010editor中观察文件格式,文件尾明显观察到是正常压缩包的逆序,考虑逆序读取生成一个新的zip python代码 with o ...

  5. DataWork之 MaxComputer的使用

    注意: 由于MaxComputer里面没有主键 默认主键为 保单号+8位险种代码+责任起期 若无主键限制,就对所有的字段进行分组 所以每次join的时候,where条件需要加上 a.主键 =b.主键 ...

  6. Kubernetes部署的10个注意事项

    摘要 容器开发有望在云中实现前所未有的可移植性和可扩展 性.此外,DevOps 开发和文化实践也有助于提升业务价 值和响应能力.但是,在开始第一个容器开发项目之前, 有一些问题需要考虑清楚:我们应该使 ...

  7. 微服务笔记之Euraka(2)

    Eureka Server启动过程 入口:SpringCloud充分利用了SpringBoot的自动装配的特点 Eureka-server的jar包,发现在MERA-INF下面有配置文件spring. ...

  8. [CSAPP]第一章 计算机系统漫游 学习笔记

    CSAPP 第一章 计算机系统漫游 1.1 信息就是位+上下文 系统中所有信息-----包括磁盘文件.内存中的程序.内存中存放的用户数据以及网络上上传的数据,都是由一串比特表示的.同时区分不同数据对象 ...

  9. Linux 安装jdk教程

    https://www.cnblogs.com/mabiao008/p/12059069.html

  10. [MySQL-1]排他锁、共享锁、意向锁、更新锁、乐观锁、悲观锁和常用的几个MYSQL存储引擎