Flink最佳实践(一)流式计算系统概述

  • 时间:
  • 浏览:0
  • 来源:uu直播快3平台

Checkpoint 生成后后,机会不可不还能否 具体情况恢复与故障容错,则所有节点从hdfs中读取 「上次的数据位置」 来重置消息队列,并从 「上次的具体情况」 始于了了重新计算。

机会流数据语义上 与流式计算强制绑定,因此实际上无限数据也无缘无故使用批补救工具来计算,比如在一个多多多多源源不断增长的数据集上进行 T+1天 的计算。

因此流补救器中还一个多多多多多问题未补救,那只是 正确性怎么能否保证

传统的流补救器无缘无故发生系统不可靠、数据易丢失、结果不准确等不足,愿因了从前的一段时间内,流就代表了 「约等于」 的补救结果。

因此在流补救系统中,时域是一个多多多多最基本的概念,流补救系统的所有计算过程都将围绕着时域来构建。

如图所示:

用户可不还能否根据业务与数据具体情况自定义每条数据应该携带怎么能否的 Watermark,而系统接收到数据时,根据当前 Watermark 否有有超出某事件时间的窗口边界来判断该事件时间窗口否有有完全

触发器可不还能否有简单的触发器,即以上任意五种,也从前是复合的触发器,即以上 多种触发条件的组合

计算需求

对于启发式的Watermark,通过 窗口+LastestDelay 多重触发器组合的法律法律依据,定义 LastestDelay 的大小,可不还能否延迟计算补救迟到数据。LastestDelay 为最大允许的延迟时间,可不还能否在窗口关闭后后将迟到的数据划入特定空间中等待图片补充计算。因此 LastestDelay 五种总要大小限制,仍然机会遗漏极端延迟的数据。

可不还能否理解为 到达某个补救时间后,线程池池取指定事件时间范围内的数据进行计算

在本节中,当我们歌词 歌词 都都 会尝试在你这类个多多多多问题的回答上更好的理解流补救器的时间推理工具:

会话窗口的大小由 用户活动事件频率 决定,长度只能被后后定义而取决于实际数据。

因此在流补救系统中,要达到你这类理想具体情况 几乎是不机会的,事件时间与补救时间时不还会有误差,如下图所示。



以x轴上的事件时间点做切分,机会把坐标图(无限数据) 划分成一片片有界限的数据集

机会补救时间 只能乱序 的问题,过多过多服务端做基于补救时间的计否有比较简单的,无迟到与乱序数据。

用户的计算需求中无缘无故使用到具体情况的场景:

经后后续每个op时

下面当我们歌词 歌词 都都 来介绍五种定义 Watermark 的法律法律依据,来帮助用户设置 Watermark 的值。

正是机会你这类差异,服务端做基于事件时间的计否有 最冗杂的,不可不还能否 对乱序的数据流做补救以 「还原」 真实世界的具体情况,不可不还能否 依赖一定的数据缓存。

如前文描述,T+1的批补救将一个多多多多无限数据集按天划分成一批批的数据集,每个批次中的数据总要 不可变的、有限的

因此对于上次到本次计算过程中的一点数据来说,它们确我我嘴笨 实 被计算了两次,只是 第一次计算作废且始终保证最终结果是正确的,看起来就像只被补救了一次一样。

通过 Checkpoint,流补救器可不还能否定时的备份系统中的具体情况与数据,并在必要时刻提供帮助。

会话窗口是批补救引擎不擅长补救的类型,通常用于 分析一段时间内的用户行为

具体情况的存储实现一般有以下几种:

过多过多在补救时间的维度上,流补救器不可不还能否 额外借助一点工具辅助线程池池 判断某个事件时间窗口否有有机会完全,以及否有有触发计算

真正决定在补救时间的哪几种后后触发计算的是 Trigger,其是描述 多会儿「计算窗口」的机制

数据是一个多多多多无限增长的数据集,因此补救工具是批补救,每次只补救后后的数据。

当然你这类做法也并总要百分百正确,在划分时间界限的付进 仍然机会发生乱序的数据,时间窗口越长正确性越高。

在事件时间的哪个位置计算 由窗口决定,窗口定义了事件时间的计算位置(区域)

Watermark 是描述 「事件时间」的输入完全性 的概念,是系统根据当前补救数据的 「事件时间」 判断 「补救进度和完全性」 的工具。

在一点场景下,补救时间等于达到时间。

比如 过滤、转换 等简单映射,来每根绳子 就可不还能否补救每根绳子 ,补救完每根绳子 就可不还能否直接输出,和时间只能任何关系。

现实含有过多过多用批补救系统来补救无限数据的场景,对于乱序的数据,批补救通过 拉长时间窗口 的做法来保持 结果的正确性

在批补救系统中,时域机会就只是 一个多多多多划分补救数据集的工具,并只能一点特殊之处。

互联网中的数据流并 不必按照当我们歌词 歌词 都都 后后预想的顺序进行传输,这是现实生活中的真实体现。

本文中的 准确一次 ,与无缘无故被提及的 精准一次、Exactly Once 等概念描述上很糙区别,精准一次表示事件在流补救器中 只被精确发生理了一次,过多不少正好一次

抛开时间推理工具不说,不必可不还能否保持强正确性的流补救器可不还能否直接取代系统中的批补救器,而不必老出结果不一致的具体情况。

事件时间和补救时间一个多多多多管的维度不一样,事件时间是定义 切分数据集的时间边界,而 线程池池真正要触发计算 不可不还能否 在补救时间上定义。

只能事件时间的流补救中 不足对窗口数据完全性的判断

基于各类时间的窗口补救 是流补救器中主要的与时间有关的操作。

Sink在使用了内外部存储的具体情况下,在本次 Checkpoint 和上次 Checkpoint 之间源源不断写数据到内外部存储中。

通过 State 与 Checkpoint 的结合使用,流补救器可不还能否保持结果数据的强一致性。

不同的客户端按顺序发出的数据包机会机会各种愿因的影响,服务端接受到的后后有极大的机会顺序是和客户端发送顺序不一致的,这只是 数据的乱序。

机会是与时间无关的操作则在事件时间的任意位置都能计算。

通过 Trigger 的定义可不还能否做到让事件时间窗口尽机会的完全,且延迟尽机会的低。

从本文中你将了解到:

在进行正文描述后后,当我们歌词 歌词 都都 先规定流式计算系统中的基本术语,正文内容机会基于哪几种术语进行讨论。

优点

比较简单的问题,可不还能否理解为用户的业务需求。

是总要很眼熟?这只是 窗口的作用,将无限数据集 沿着时间的边界切分成有限数据集

比如 当前事件时间-10m,在窗口大小为10s的线程池池中,这愿因第一个多多多多窗口要 等到10分钟后后的数据老出 才机会会被关闭。

达到时间是 系统接收到事件的时间,即服务端接收到事件的时间。

可不还能否简单理解为流补救器中的一块内存区域(机会使用了内外部数据库来存储)。

你这类问题也是经典批补救不可不还能否 回答的问题,即想得到哪几种样的数据运算结果,机会被定义在线程池池代码中。

因此随着流补救器的不断发展,现代化的流补救器依托 State、Checkpoint、WAL 等机制支持 准确一次,基本都具备了与批补救平起平坐 正确性

滑动窗口无缘无故被用来统计诸如 每5分钟统计过去10分钟的访问量 的需求,窗口长度为10分钟,滑动步长为5分钟。

可不还能否看了,每条数据过来,总要更新线程池池中最新的 Watermark。

当我们歌词 歌词 都都 还不可不还能否 定义在补救时间的哪几种后后触发计算,也只是 说,哪几种后后当我们歌词 歌词 都都 不可不还能否说某个窗口的数据机会都到了,是个完全的数据集,可不还能否进行计算了

Watermark 的作用只是 给各个窗口 「盖上盖子」,使其成为一个多多多多封闭的窗口,表示数据机会完全达到。

从事件时间的维度上看,流补救器执行代码获取计算结果时,必定不可不还能否 取某个事件时间范围内的数据进行计算

基于事件时间划分

准确一次语义需求

比如Web服务器中Session的概念,用户在一定时间内只能后续活动的话Session机会过期,机会用户无缘无故保持活跃的操作,只能Session将无缘无故保留。

有了 Trigger 的定义后后,当我们歌词 歌词 都都 再来看看 完美式Watermark 和 启发式Watermark 中的缺点怎么能否通过 Trigger 的组合来补救。

本节先从 时间推理工具 的强度来讨论流补救器拥有的 不必可不还能否正确补救乱序数据的超能力,使其成为超越批补救的事实标准。

流补救器会在补救时间的哪几种后后触发?

传统的批补救拥有巨大 吞吐量 的优势,因此随之而来的是极其 高延迟 的不足。

当我们歌词 歌词 都都 在事件时间的维度上定义窗口,只是 定义了各个数据片的 数据区域与位置,流数据机会 按照自身携带的事件时间被划分到指定的时间窗口中,流补救器机会取其中某个位置的数据进行计算。

只能对于流补救器来说,流补救器执行过程中宕机重启后后 否有有不必可不还能否保持结果数据的正确性与一致性 是现代流补救器的基本素质。

有了时域和窗口的概念后,基本上当我们歌词 歌词 都都 就拥有了上手流补救线程池池开发的条件了。

State 即为具体情况,流补救器中常用来缓存窗口数据、线程池池运行时具体情况、数据源偏移量等信息。

现在,当我们歌词 歌词 都都 来总结一下关于流补救器的时间推理工具的一个多多多多问题:

Trigger 的触发计算信号可不还能否从以下十几块 维度来定义:



在图中,Watermark 老出表示当前事件时间窗口已完全

现在,你知道流补救器的时间推理工具是哪几种多会儿?

对拥有时域概念的数据流做操作,就必定会用到窗口你这类工具,它的本质只是 将无限数据集 沿着时间的边界切分成有限数据集

在固定窗口的基础上,滑动窗口增加了 滑动步长 的定义。

流补救器定义完时域后后,接着不可不还能否 定义在时域之上的操作,所有流补救器的操作都可不还能否分为五种类型:与时间无关的和与时间有关的

为哪几种流补救器不可不还能否 State?

因此此时当我们歌词 歌词 都都 仍然无法了解到,先进的流补救器核心思想到底先进在哪里?它是怎么能否做到和批补救器一样的正确性甚至拥有超越批补救的能力?



每个用户都机会产生多个会话窗口,每个会话窗口的大小取决于该用户否有有持续产生活动事件。

和固定窗口、滑动窗口不一样,会话窗口只能固定的窗口大小定义

一点先进的流补救器总要提供让系统可不还能否游刃有余地 应对真实世界中错乱数据 的工具,这只是 超越批补救的时间推理能力

你这类机制只是 Checkpoint(分布式全域一致快照),其含有流补救器全链路中的信息:

等等。

机会数据乱序的愿因,服务端收到数据时的时间和事件五种的时间机会是相差极大的。

而机会基于补救时间计算,只能事情将变得十分简单,只不可不还能否 补救9-10点范围内服务端收到的所有数据即可,因此输出的结果并总要真正正确的结果。

机会 Watermark 五种发生严重的不足,数据完全性与低延迟不可兼得,且在极端具体情况下仍然 不可保证所有数据都被补救到。过多过多,只根据 Watermark 来决定否有有始于了了补救数据是比较不精准的。

从以上当我们歌词 歌词 都都 讨论 State、Checkpoint 等机制来看,它们只能保证在 流补救器内内外部的准确一次

在数据源设置一系列的checkpoint barrier

缺点

在第7条数据到达时,其携带的 Watermark 机会 超过了 0-5 你这类窗口的边界,只能此时当我们歌词 歌词 都都 可不还能否认为 0-5 你这类窗口的所有数据机会达到,可不还能否进行计算。

准确一次 是事件在流补救器中 只被准确发生理一次 的描述。

Checkpoint 机制对数据源有一定要求,即数据源的必要条件为 支持重放

滑动窗口的窗口长度和滑动步长的关系如下:

不论是基于事件时间的窗口还是基于补救时间的窗口,总要有不同的窗口类型可不还能否使用,常见的如:固定窗口、滑动窗口、会话窗口 等。

优点

时域是学习流补救系统的第一门课,大多数从事批补救系统相关工作的同学在第一次接触流补救系统时时不还会有疑惑机会概念混淆,其愿因大要素是机会只能 时域 的概念。

举一个多多多多简单的场景,在联网的游戏线程池池中,游戏始于了总要将本地的数据上传到服务器进行排名、得分等结果统计。

只能用户该 怎么能否定义具体的 Watermark 的值 呢。

假设用一坐标轴表示无限数据,坐标轴上 以事件时间为x轴、以补救时间为y轴 画图,当我们歌词 歌词 都都 可不还能否得到:

对于完美式的Watermark,可不还能否通过 窗口+固定补救时间 多重触发器组合的法律法律依据,在 Watermark 到来后后,提前或周期触发计算并输出,达到低延迟的效果,Watermark 到来后也会触发一次计算。

缺点

在事件时间的维度上定义了一个多多多多个的数据窗口,流数据机会按照自身携带的事件时间被划分到指定的时间窗口中。

有了 Watermark 后后,我嘴笨 用户可不还能否以此来判定 窗口否有有完全,但窗口完全不必愿因要触发计算,只能说满足了触发计算的条件。

在实际应用中,完全了解输入数据是不切实际的,且数据的乱序延迟问题总比用户想象的要糟糕。

在最理想的具体情况下,事件时间=达到时间=补救时间,在批补救系统中的简单粗暴默认三者相等,过多过多批补救只能乱序的烦恼。

因而,完美式的 Watermark 往往是一个多多多多比较大的值,但在一点高时效性要求的系统中,完美式的 Watermark 带来的高延迟往往是只能被接受的。

补救时间是 系统始于了了补救到达事件的时间

即使流补救器宕机从恢复点重启了,只能 后后补救的数据实际上机会写到了内外部存储中,你这类具体情况下就只能称之为端到端的准确一次了。

批补救是五种通过将无限数据 划分成最终一致的有限批次数据 的补救法律法律依据。

在你这类具体情况下,机会从前应该于9点发送的数据包,服务端到10点多才收到,甚至永远收只能。

从时间类别的划分上来看,只能事件时间会有乱序的困扰。

一点同学到这里会老出一点概念上的混淆,当我们歌词 歌词 都都 总要机会定义过事件时间多会儿,为哪几种不可不还能否 定义补救时间?

因此正机会较大的 Watermark 值,只要某窗口中迟到的数据在其窗口边界10m之内达到,总要不必被遗漏的。

做为当今最火热的流式计算引擎,Flink以其卓越的性能、强度可信的正确性等种种价值形式收获了少量粉丝。

在批补救器中,同一批数据、同一个多多多线程池池池重复计算的结果应该是 始终一致 的,从前一来即使批补救器执行过程中挂了,用户也可不还能否通过一点补数的手段重跑,以 保证最后结果的正确性

本文作为学习Flink的前置知识,将从 时域、窗口、时间推理工具、强正确性方案 等方面讨论流式计算系统的核心概念,为初学者揭开其神秘面纱。

用窗口在事件时间的维度上定义好计算位置后,流补救器还不可不还能否 在补救时间的维度上知道,哪几种后后触发计算

完美式的 Watermark 是在用户 完全了解输入数据的前提下,构建出完美的水位线,不必有数据超过水位线

流补救与批补救最大的不同在于流补救中对时间类别划分比批补救更丰富,且用不共同间类别计算出的数据,结果与意义机会全然不同。

值得注意的是,本文不必涉及任何具体的流式计算引擎,这愿因本文中的所有概念在几乎所有流式计算系统中总要通用的(Flink、SparkStreaming、StructuredStreaming等),机会大要素流式计算系统的抽象模型大体一致。

流补救器会在事件时间的哪个位置计算?

按照固定的时间片划分数据流,将数据流 分割成具有固定大小的片段

下面当我们歌词 歌词 都都 来讨论现代流补救器中,常见的保持强正确性的工具。

基于补救时间划分

时间推理工具让流补救器站在了批补救器的之上,使其不必可不还能否真正发生理现实世界中的乱序问题。



假设 window-size=1只能window1、window2、window3等各个窗口的大小永远固定是1,且 各个窗口不必重叠只是 会有间隙

这只是 基于事件时间计算时,时间乱序带来的困扰。

容错需求

你这类类型的操作往往是最简单的,机会不管是哪几种类别的时间,都对这类操作 只能任何影响

也只是 说,在完美式的 Watermark 中,不必有任何数据被遗漏,所有数据在完美式的 Watermark 下都不必可不还能否准时达到。

数据乱序是指 服务端接收的数据顺序并总要客户端数据产生的顺序 的问题。

启发式的 Watermark 一般总要用户根据数据具体情况,比如 分区、分区内排序、文件增长率等 提供尽机会准确的进度估计,设置一个多多多多较为理想的值

除了 State 之外,流补救器还不可不还能否 五种 可不还能否将 State 中的数据进行备份与恢复的机制 不可不还能否保证 任多会儿刻流补救器的宕机重启总要会影响最后的正确结果

在事件时间维度上划分的各个窗口从前总要 未封闭的,表示 数据还没完全达到

流补救器的计算结果是哪几种?

无论是看起来像是过渡期产物的批流混合,还是感觉像是 「终结者」 的纯流式计算,都离不开最核心的计算组件:流式计算系统



现实生活中造成时间乱序的愿因有过多过多,基本总要不可补救的,比如以下几种因素:

过多过多当我们歌词 歌词 都都 不可不还能否 另外五种启发式的 Watermark,其 不必可不还能否在保持低延迟的共同,最大机会的保持窗口的完全性。

随着大数据系统的不断发展,传统的批补救已然无法完全满足对 时效性 要求愈加严苛的业务需求。

达到时间比较少被使用。

即使数据源、计算引擎、存储系统都不必可不还能否支持精准一次的语义,因此在一点复合指标的计算过程中(如5分钟内的PV),计算系统进行到一半机会特殊愿因奔溃后重启,我嘴笨 其将自动将上次计算过程产生的副作用消除,并从数据源重新拉取数据进行计算并输出,看起来就像哪几种问题都没发生过一样。

某个比较倒霉的哥们,机会在地铁机会隧道等信号不好的场所中,数据发送的过程机会机会内外部环境因素而发生意外具体情况(信号不好、甚至无信号)愿因延迟发送甚至无法发送。

会话窗口的划分也这类Session的定义,如下图所示:

因此现实生活中,不必可不还能否真正做到精准一次的效果是非常难的。

过多过多本文中用 准确一次 的概念来描述你这类语义,对于数据结果来说,事件在流补救器中 只被准确的补救了一次

事件时间是 事件真实发生的时间

设事件时间窗口大小 size=5s,在事件时间的维度上可不还能否划分以下窗口:

数据接收具体情况如下:

机会其要兼顾所有数据,注定了 Watermark 会在比较晚的时间后不可不还能否到来

如下图所示:

无限数据是五种不断增长的,本质上 无限的数据集

定义数据携带的Watermark为 当前事件时间-2s,(Flink中通过SourceFunction的emitWatermark设置,每条数据总要携带一个多多多多Watermark)。

以 Flink 中 Checkpoint 为例,其一个多多多多生成周期如下:

迟到的数据到来前 不可不还能否 缓存更多数据

机会这里用流数据来描述机会时不还会让人误以为其是一个多多多多流式计算系统补救的数据集。

比如T+1每天一个多多多多时间窗口,只能除非数据延迟超过一天,因此当我们歌词 歌词 都都 认为你这类批次补救的结果是正确的、只能遗漏的:

流补救是五种 持续的数据补救模式、设计用于无限数据补救的执行引擎



假设 window-size=1 & window-slide=0.5只能表示 窗口长度为1单位且每0.十个 单位就向前滑动一个多多多多新窗口

State不仅给用户提供了高性能实现计算需求的方案,也是流补救器保持强正确性的工具之一。

固定窗口是最简单也是最常见的窗口类型。

在批补救中,窗口只是 定义的多久补救一次,每次补救的数据只是 根据你这类窗口时间(一般总要补救时间)划分出来的有限数据集。

只能服务端在基于事件时间统计9-10点时间段内游戏的排行时,机会该用户数据迟迟未到,马上计算的话结果将是不正确的(机会少了一个多多多多用户的数据),而选着等待图片的话只能知道该用户的数据多会儿到来。

只能用户怎么能否去定义 Watermark ,线程池池又是为什会 判断 Watermark 到了不可不还能否 关闭窗口进行计算呢?

比如简单的转换操作、冗杂的窗口操作,以及否有有做聚合、join等,比较具有代表性的计算结果有 计算总和、构建直方图、训练模型 等。

滑动窗口由 固定窗口长度、窗口滑动步长 选着,如下图所示:

在流补救中,根据不同的时间类别,划分出来的窗口性质只是 同:

为了适应逐渐变得 「实时」 的年代,大数据系统架构也由简单的批补救转向批流混合的Lambda架构,最后机会会逐渐演变成只能流计算的 高精准高时效 的Kappa架构。

也常被称为 流数据,因此当我们歌词 歌词 都都 这里只用 无限数据 你这类概念来描述它。

借助可重放的数据源、State/Checkpoint的流补救器,当我们歌词 歌词 都都 可不还能否保证数据源到计算引擎的准确一次,只能使用内外部存储的具体情况下怎么能否保证端到端的准确一次?

当我们歌词 歌词 都都 通过一个多多多多例子来说明 Watermark 的作用。

这是最完美的五种具体情况,因此真实业务场景中使用完美式的 Watermark 往往要付出比较大的代价。