Flink系列之流式
本文仅是自己看书、学习过程中的个人总结,刚接触流式,视野面比较窄,不喜勿喷,欢迎评论交流。
1、为什么是流式?
为什么是流式而不是流式系统这样的词语?流式系统在我的印象中是相对批处理系统而言的,用来处理流数据,实现数据处理功能的一个系统,而流式一词提醒我要以数据产生的方式去看待数据和以及处理过程,即在现实生活中,数据是以流的形式不断产生的,处理的过程应贴近数据产生的方式。
2、流与批
在处理数据时,对数据而言有:无界和有界之分。无界可以理解为不知道数据产生的停止时间,在数学上可以用前闭后开( [ ) )的一个区间表示;有界则可以对应的理解为一个闭区间,即知道数据产生的起、止时间。其实这里的有界和无界也只是一个相对概念,某一时间段数据还在产生,则可以认为是无界的。
在过去进行大规模数据分析时,是以批量的形式收集和分析数据的。什么意思了?就是收集一段时间内的数据或者一定量的数据了拿去分析,统一返回一个结果后,然后处理下一批的数据,每次处理的是有界数据,比如每天都处理前一天的数据,对数据进行分析后应用到各种场景中。在这个过程涉及到了数据的抽取、转换、加载(ETL)了,且该过程中需要人为的干预,才能连续的执行。从之前的描述其实就可以了解到,在批处理中,当我们面临立马得到数据处理结果的场景时,是有点束手无策的。与批处理相对应的是流处理,流处理可以理解是拿到数据后立马处理然后返回一个结果,当然也可以返回一个结果集。目前流处理主要应用在有实时需求的场景中,比如数据的实时监控、天猫的双十一不停刷新成交金额等等。
关于流过程和批过程的区别,在《流式架构》一书中有这样的一段话,比较好理解:
将数据比作水,批过程和流过程分别相当于用桶装水后交付给用户以及用水管让水流向用户。可以在水管上加个阀门,关闭水龙头的时候水流被周期性截断。有了水管和阀门,用户就可以选择截断水还是让水继续流--能够同时应对两种交付方式。反之,即使使用桶运水的速度足够快,这种桶(批)的交付也永远不可能是连续的。 |
3、流处理工具简介
那既然以流的方式处理数据更贴合数据的产生本质,那为什么要需要批处理?其实对于这个问题我目前也不是很清楚,据了解,在技术的发展过程,流处理的难度更大,更多原因后期会以专门的一小节补上,借用一句名言对付此刻的自己:存在即合理。哈哈!(换句话说,我就是不懂)
目前用于流处理的工具,我了解的右storm、sparkstreaming、flink,关于三者的区别,大伙都是可以百度得到的。此外,虽然都是用于流处理,sparkstreaming,是用桶装水给用户,Flink则感觉是修水管。
Flink号称是目前唯一实现高并发、高性能、低延时的开源组件,也想解决目前Lambada架构带来的一些维护、开发困难等问题,其具有很多优点也是该系列博客的主角,在这里我就不提了,后面会重点的分析。
最后需要说一点的是,流处理工具功能的实现,其实离不开消息系统的如kafka、MapR Stream所具备的持久性、容错性、生产消费解耦等诸多优点。