开发者学堂课程【实时计算 Flink 实战课程:实时计算 Flink 训练营场景与应用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/762/detail/13352
实时计算 Flink 训练营场景与应用
主要内容:
一、技术原理
二、技术应用
三、应用场景
四、行业案例
一、技术原理
// 第一部分,就是技术原理,这部分主要代表实时计算的内容以及实时计算所代表的批处理。以及Flink 的流处理和批处理相比较,最后由流计算部分引发出整个围绕事件触发处理相关的技术探讨,本小节并不是技术总结,故仅作一些简单的讲解,通过这部分的内容能够逐步了解Flink 的原理。
1、通晓原理举一反三
Flink 的官网上有关的业务架构的示意图:
// 通过示意图本身来说,做业务开发及架构设计时,希望业务开发人员及架构设计师能够通晓产品的技术原理,如此才能避免踩坑,提升数据开发的效率。同时对于很多架构设计师来说,只有先通晓技术原理,才能培养全局架构的审视及嗅觉,如此可以避免在架构上出现重大失误。通过技术原理来推导出应用场景,并在最后一章行业案例里面得到一一印证。
2、容易混淆的四大概念(数据处理时效性的四大概念)
// 这四个概念比较常见且经常被谈论,是从不同的维度去描述不同的计算特征。四个概念分别为实时计算与之对应的离线计算,同时横坐标下方的流计算,也可称为流处理,与之对应的为批处理。实际上这四个概念是从两个维度去描述的计算或处理所具备的一个特征。
// 中间的横坐标轴以上表现为业务特征。实时计算强调实时特征,指计算过程快速、请求响应迅速,描述的是业务实时需求特征:出结果一定要快。对于离线计算来说,在阅读相关的一些文献之后,才能真正感受到很早以前的在六七十年代一个大型计算机有大量的作业,其实是处于运行一个离线任务或者offline任务。就是提交一个大体的处理,如批处理,打印一个提交一个。但是批处理往往没办法及时得到一个响应,就归到操作系统的离线处理,第二天科研人员操作计算机,再通过终端登录机器去查看离线处理的结果,所以整个过程其实是一个非实时的、非交互式的特征,所以对于离线计算来说,描述的本质同时也是业务特征,不过不求快、不求实时,只要最终出结果就行。实时计算及离线计算其实本质上都是在描述处理业务的需求,而本身就是一个技术需求。描述的是如何计算,强调的是一个实时的结果或者是离线的结果。
// 坐标轴以下强调的是技术是使用流计算还是批处理来解决的。对于流技术来说,强调计算是流式处理的,常驻、事件触发、通常具备实时性(经常与实时计算混淆的原因),但本质上为技术特征,而非业务特征。对于批处理或者批计算从本质上来说,本身也是描述技术的,强调计算是通过批式来进行处理的,非常驻的、外界触发的,通常不具备实时性,因为这一点,所以也经常与离线计算结合在一起讲解,强调批处理是一个非实时计算,是一个离线计算,同理批处理也是一个技术特征,而非业务特征。
// 通过这些描述分清实时计算、流计算、离线计算及批处理。实际上是从两个不同的维度去描述计算的。
3、数据处理两大门派
// 对于批处理来说,处理分为三步,第一步,用户装载到存储系统,第二步,批量计算的系统会将数据加载到存储里面,此时可能会进行构建,同时也可能会做一些相关的处理。保证之后的计算的准确性,第三步,外界发起一个数据请求或计算请求,从而触发计算,计算出结果返回给用户,所以本质上是装载、存储及计算。
// 对于流式计算来说,使用的方式完全不一样,用户通常来说会把流式作业提前做好。提交至集群或者计算系统里面,此时右边的数据写出会进入一条触发一条流式计算的运算,实际上在进行一些相关联系优化的时候不会如此极端,但是为了把问题说的更清楚,可以理解为数据写入一条,此时流式计算就会触发一次,运算一次,输出一次,并最终写出一个结果,所以本质上是事件触发的一个计算,时间非常的短暂。
// 其实对于批处理来说,数据装载、数据计算本身都是一个完全脱节的计算,故此时数据是一批批加载,计算也是一批批进行的,所以本身是一个批量的计算,同时是一个高试验的计算,数据的加载为一批批的加载计算,批处理也是一批批请求计算的,本身是一个高层计算,同时还是用户主动发起去做计算请求的话题。此时会产生大量计算,而对于流式计算来说,正好与之相反,因为计算是持续的。只要有数据写入,就会持续的计算,故流式计算经常会伴随实时计算这一说法。数据写入一条就会计算一条,这是事件触发的一个计算。
// 故从数据处理的两大门派来看,批处理与流处理,描述的是数据处理的两大门派,截然相反的两种处理方式。
(1)流式处理特征
// 对于流式处理的特征,还有其他特点。对于流处理来说,我在维基百科里面的三个关键词为Event、Stream 及Process ,学科名的命名为世界流处理,经常在工厂或者工业里面,习惯称之为流处理或者流计算。Event 、Stream 及Process 正好拆解出来后描述了流式处理的三大特点。
// 第一大特点为 Event,因为是由事件触发的计算,也就意味着事件是进入一条触发一点,所以 Event 非常重要,为计算的触发源,同时对于流式计算来说,还有重要的一点是必须带有时间属性的事件。对于这个不细展开讲,就是对于事件来说,会有事件的发生时间,处理时间,进入时间等,因为流计算强调与时间相关,这一点与批处理不一致。若有兴趣,可以阅读一下 Flink 官网上的文档,里面有关这方面有一个详细的叙述。
// 第二大特点为Stream ,第二个特点与第一个联合起来为 Event Stream ,就是事件的流。同时加了一条为无界的事件,所谓无界的世界就是对于流计算来说,数据是持续不断的发生,源源不断的进入流计算的系统。所以本身只要数据源(源头的数据),不进行人为的终止及干扰,数据会源源不断的进入到流式处理系统,故本质上就是一个无穷无尽的事件流,故此叫做无界的事件流。
// 第三大特点为Process ,是一个处理系统或者一个计算系统,是实时的在线处理,对于流计算来说,因为希望事件进入一条就触发一次,马上处理一次,消化一次,输出一次,这个过程需要非常迅速,所以需要实时的在线处理。从实时处理的名词可以看到,英文名词定义里面看到三大特点。第一,带事件属性的事件,第二,无界的事件集合,第三,实时的在线处理。
(2)流式处理的业务价值
// 前面讲解的为偏技术一点,重点就是实时处理,但从技术的角度,去观察事实处理,这是处理的业务价值,实时处理最大的一个特点是事件进入一条触发一条,计算一条,输出一条,这其实是在讲解课程时为了简化表达及整个的模型,故会把模型抽象为是哪一条处理的,但实际上在真正的生产过程中,不会有这么极致的一个处理。
// 对于流式处理的业务价值来说,之前讲过一个数据进入一条,处理一条,就说明数据产生之后,希望能够尽快被处理完成,故价值点在于当数据产生之后,想要迅速进行计算及拿到业务结果时,此时就是流式计算最大的业务价值,数据的价值,与之提出了一个观点,需要流计算时,一般都是数据的价值随着流时间的流逝而迅速降低的。同时下面也会谈到,如图。对于离线计算来说,数据放置一天,放置一个小时,甚至放置一个月,都不会影响计算业务。对于实时计算来说,需要数据产生即刻进行计算,否则随着时间的流逝,数据价值会逐渐的降低。
(3)流式处理的业务价值具体案例:
// 经典的一个案例,就是双十一的大屏,其实是一个实时计算或者流式处理的一个对比,新的一个点,因为整个的大屏其实描述的是双十一当时成交的一个总工,但对于成交整合来说,希望实时看到整体的成效总额。这是双十一大屏的一个价值。
// 再举一个比较深入的例子,平常淘宝或者天猫的卖家,需要根据大数据具体的情况来调配广告资源位,或者调配货物,此时卖家十分希望拿到实时的具体的数据。设想一下,就是若拿到广告流量或者点击流量只能拿到一个小时的,在天猫双十一当天我能拿到一个小时之前的一个数据对卖家其实没有用处,因为那时大促高峰都已经过了一个小时。一个小时足以缓冲一切大促的高峰,所以对于淘宝及天猫的卖家来说,若能拥有若干小时之前的,甚至半个小时之前的数据可能都没有任何价值,都没有办法进行调配广告策略或者销售策略,故此需要实时化的一个价值所在,需要立刻知道当下最热的流量,用户最感兴趣的商品,通过这个卖家赶紧调整商业策略,而时间一旦错过就不再。举电商营销促销活动来提升成交金额这个例子来体现流式处理的业务价值。
二、技术场景
// 前面内容为整个技术的背景及原理,希望通过技术原理来了解流计算,流计算处理的特征、价值及应用具体的案例来描述流计算能够给客户带来的业务价值,这些都是为后续做长期的探讨做铺垫的,接下来第二章开始进入一些常见的探讨。
1、技术的三大场景
// 专门要讲解抽象的三大场景最大的原因在于抽象的三大场景往往是接下来所有探讨的行业场景、行业案例及客户案例,最初的源头,
都在三大场景里面,三大场景是一个原理性的、普适的一个介绍,故若了解就相当于通晓了基本的原理。同时这个场景其实是高度抽象的,完全没有带业务的属性,完全是一个技术的属性。若掌握了技术属性,就可以举一反三推导到其他的应用场景及行业案例里,这就是提前要了解这三大场景的原因。