Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记

这篇具有很好参考价值的文章主要介绍了Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习文档:概念透析 - 及时流处理

学习笔记如下:


及时流(timely stream)

及时流处理时有状态流处理的扩展,其中时间在计算中起着一定的作用。

及时流的应用场景:

  • 时间序列分析
  • 基于特定时间段进行聚合
  • 对发生时间很重要的事件进行处理

Event Time 和 Processing Time

处理时间(processing time)

处理时间的即数据到达各个 Operator 的机器时间。

当一个流程序在运行时,所以依赖时间的 Operator(例如窗口)均会使用运行该 Operator 的机器时间。一个小时的窗口将会包含在一个整小时内到达的所有记录。例如,如果一个应用在 9:15 启动,那么第一个时间窗口是从 9:15 - 10:00,下一个事件窗口是从 10:00 - 11:00。

处理时间是一个最简单的时间概念,不要求各个流和机器之间的协调。它提供了最高的性能和最低的延迟。然后,在分布式和异步环境中,处理时间并不提供确定性,它容易受到记录速度、不同 Operator 之间的流动速度以及中断的影响。

事件时间(event time)

各个事件在生产设备上的发生时间。

这个时间通常在记录进入 Flink 之前就已嵌入其中,并且这个事件时间戳(evetn timestamp)可以从每条记录中提取。对于事件时间而言,时间的进度取决于数据,而不是任何时钟。使用事件时间的程序必须指定如何生成事件时间水印(event time watermarks),这是在事件时间中指示进度的机制。

在完美情况下,事件时间将产生完全一致和确定性的结果,无论事件何时到达、如何排序。但是,除非事件(依据时间戳)有序到达,否则在等待乱序事件时,一定会产生一些延迟。又因为只能等待有限的时间,所以也限制了事件时间应用程序的准确性。

假设所有的数据都已经到达,基于事件时间的 operator 将能按预期运行, 即使在处理乱序或延迟事件、或重新处理历史数据时,也能产生正确和一致的结果。例如,每小时的事件时间窗口将包含所有事件时间戳落在该窗口内的记录,无论它们到达的顺序或处理的时间如何,这些记录的时间戳都落在该小时内。

请注意,有时当使用事件时间程序实时处理实时数据时,它们将使用一些基于处理时间(processing time)的 operator,以确保它们及时进行。

Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记,Flink,flink,及时流,事件时间,watermark,窗口

Event Time and Watermarks

一个支持事件时间(event time)的流处理器需要有一个测量事件时间进展的方法。例如,一个按小时创建窗口的 window operator 需要能够及时发现事件时间已经超过了一小时的末尾,从而使该 operator 可以关闭窗口。

事件时间可能独立于处理时间变化。例如,在一个程序中,operator 的当前事件时间可能因为接收事件的延迟而略微落后于处理事件,而两者都以相同的速度进行;又比如,在一个程序可能通过快速处理 Kafka TOPIC 中缓冲的历史数据,来在几秒内处理完数周的数据。

在 Flink 中,用于测量事件时间进展的机制是 watermarks。Watermarks 流作为数据流的一部分,携带了时间戳 t;其中,watermark(t) 表示数据流中的事件时间已经到达了 t,当前数据流中应该不会再有比 t 更早的事件时间了。

当事件是按事件时间顺序排列时,Watermark 就是一个周期性的标记,样例如下:

Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记,Flink,flink,及时流,事件时间,watermark,窗口

在乱序流中,watermark 至关重要。一般来说,watermark 是声明的数据流中的某个时间点,事件时间在改时间点之前的记录都已经已经到达。一旦 watermark 到达了某个 operator,该 operator 就将其内部的事件时间推进到 watermark 的值。

Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记,Flink,flink,及时流,事件时间,watermark,窗口

Watermarks in Parallel Streams

watermark 是在 source 或 source 之后生成的。source 的各个并行的 subtask 通常独立地生成 watermark,这些 watermark 定义了特定并行 source 的事件信息。

随着 watermark 在程序流中流动,它们在到达每个 operator 后会推动该 operator 的 event time。每当一个 operator 推动了它的 event time,它就会向每个下游生成一个新的 watermark。

一些 operator 会消费多个输入流(例如 keyBy()partition())。这类 operator 的 event time 是所有输入流的 event time 的最小值。

Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记,Flink,flink,及时流,事件时间,watermark,窗口

Lateness 延迟

可能会存在某些元素违反 watermark 条件,即在 watermark(t) 已经发生后,仍然会有出现很多时间戳小于等于 t 的元素。因为某些元素可能被任意延迟,所以不可能指定某一个事件时间前的事件均已到达的时间。此外,即使延迟时间有限,watermark 延迟太长时间也通常是不可取的,因此这会导致在评估事件时间窗口时延迟过多。

延迟元素:在系统的事件时间时钟(通过 watermark 表示)已经超过延迟元素的时间戳之后到达的元素。

Windowing 窗口

在流处理中,聚集操作与批处理是不一样的。因为流式无限生成的,所以在流处理中,不可能统计流中的所有元素;取而代之地,在流处理中,通常在窗口范围内进行聚集操作,例如 “对最近 5 分钟内计数”、“对最近 100 个元素求和” 等。

窗口可以是时间驱动的(例如每 30 秒),也可以是数据驱动的(例如每 100 个元素)。我们通常会区分不同类型的窗口,例如:

  • 滚动窗口(没有重叠)
  • 滑动的窗口(有重叠)
  • 会话窗口(由不活动的间隙打断)

Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记,Flink,flink,及时流,事件时间,watermark,窗口文章来源地址https://www.toymoban.com/news/detail-776326.html

到了这里,关于Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink|《Flink 官方文档 - DataStream API - 算子 - 窗口》学习笔记

    学习文档:《Flink 官方文档 - DataStream API - 算子 - 窗口》 学习笔记如下: 窗口(Window):窗口是处理无界流的关键所在。窗口可以将数据流装入大小有限的 “桶” 中,再对每个 “桶” 加以处理。 Keyed Windows 在 Keyed Windows 上使用窗口时,要调用 keyBy(...) 而后再调用 window(..

    2024年01月18日
    浏览(45)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 TaskManager 内存》学习笔记

    学习文档:Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 TaskManager 内存》学习笔记 学习笔记如下: Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。其中,Flink 总内存(Total Flink Memory)包括 JV

    2024年03月15日
    浏览(44)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 网络缓冲调优》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 内存配置 - 网络缓冲调优》 学习笔记如下: Flink 中每条消息都会被放到网络缓冲(network buffer) 中,并以此为最小单位发送到下一个 subtask。 Flink 在传输过程的输入端和输出端使用了网络缓冲队列,即每个 subtask 都有一个输入队列来接收

    2024年01月21日
    浏览(54)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 Flink 进程的内存》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 内存配置 - 配置 Flink 进程的内存》 学习笔记如下: Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。 Flink 总内存(Total Flink Memory)包括 JVM 堆内存(Heap Memory)

    2024年01月21日
    浏览(48)
  • Flink|《Flink 官方文档 - 部署 - 命令行界面 - 提交 PyFlink 作业》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 命令行界面 - 提交 PyFlink 作业》 学习笔记如下: 当前,用户可以通过 CLI 提交 PyFlink 作业。对于通过 flink run 提交的 Python 作业,Flink 会执行 python 命令。因此,在启动 Python 作业前,需要先确定当前环境中的 python 命令指向 3.7+ 版本的 Pyt

    2024年02月22日
    浏览(63)
  • Flink|《Flink 官方文档 - DataStream API - 状态与容错 - 使用状态》学习笔记

    学习文档:Flink 官方文档 - DataStream API - 状态与容错 - 使用状态 相关文档: 有状态流处理背后的概念:Flink|《Flink 官方文档 - 概念透析 - 有状态流处理》学习笔记 Redis 过期 key 的删除机制:Redis|过期 key 的删除机制 学习笔记如下: 如果要使用键控状态,则必须要为 DataS

    2024年02月03日
    浏览(42)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 调优指南 & 常见问题》学习笔记

    学习文档: 《Flink 官方文档 - 部署 - 内存配置 - 调优指南》 《Flink 官方文档 - 部署 - 内存配置 - 常见问题》 学习笔记如下: 独立部署模式(Standalone Deployment)下的内存配置 通常无需配置进程总内存,因为不管是 Flink 还是部署环境都不会对 JVM 开销进行限制,它只与机器的

    2024年02月19日
    浏览(42)
  • Flink|《Flink 官方文档 - DataStream API - 用户自定义 Functions》学习笔记 + 源码分析

    学习文档:Flink 官方文档 - DataStream API - 用户自定义 Functions 学习笔记如下: 用户可以通过实现接口来完成自定义 Functions。 实现接口并使用的样例: 使用匿名类实现的样例: 使用 Lambda 表达式实现(Java 8)样例: 所有的 Flink 函数类都有其 Rich 版本,在 Rick function 中,可以获

    2024年01月18日
    浏览(46)
  • transbigdata 笔记:官方文档案例1(出租车GPS数据处理)

    官方文档中给定的出租车数据在transbigdata/docs/source/gallery/data/TaxiData-Sample.csv at main · ni1o1/transbigdata (github.com)     transbigdata笔记:数据预处理-CSDN博客 transbigdata笔记:数据预处理-CSDN博客 异常记录点,指的是记录点前后的出租车状态(有乘客/无乘客)和自己的出租车状态不一

    2024年01月21日
    浏览(47)
  • 学习笔记-elstaciElasticSearch7.17官方文档

    特征 适用于所有 Elasticsearch API 的强类型请求和响应。 所有 API 的阻塞和异步版本。 在创建复杂的嵌套结构时,使用流畅的构建器和功能模式允许编写简洁但可读的代码。 通过使用对象映射器(例如 Jackson 或任何 JSON-B 实现)无缝集成应用程序类。 将协议处理委托给一个 h

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包