Flink-简介

flink简介

1.大数据4代计算引擎

        第1代——Hadoop MapReduce

                批处理

                Mapper、Reducer

                流处理

                Strom

        第2代——DAG框架(Tez) + MapReduce

                批处理

                1个Tez = MR(1) + MR(2) + ... + MR(n)

                相比MR效率有所提升

        3. 第3代——Spark

                批处理、流处理、SQL高层API支持

                自带DAG

                内存迭代计算、性能较之前大幅提升

        4. 第4代——Flink

                批处理、流处理、SQL高层API支持

                自带DAG

                流式计算性能更高、可靠性更高

2. flink起源

        许多系统都会产生连续的事件流,如行驶中的汽车发射出 GPS 信号,金融交易,移动通信基站与繁忙的智能手机进行信号交换,网络流量,机器日志,工业传感器和可穿戴设备的测量结果,等等。如果能够高效地分析大规模流数据,我们对上述系统的理解将会更清楚、更快速。简而言之,流数据更真实地反映了我们的生活方式。

        因此,我们自然希望将数据用事件流的方式收集起来并加以处理。但直到目前,这并不是整个行业的标准做法。流处理并非全新的概念,但它确实是一项专业性强且极具挑战性的技术。实际上,企业常见的数据架构仍旧假设数据是有头有尾的有限集。这个假设存在的大部分原因在于,有限集匹配的数据存储及处理系统建起来比较简单。但是,这样做无疑给那些天然的流式场景人为地加了限制。

        我们渴望按照流的方式处理数据,但要做好很困难;随着大规模数据在各行各业中出现,难度越来越大。这是一个属于物理学范畴的难题:在大型分布式系统中,数据一致性和对事件发生顺序的理解必然都是有限的。伴随着方法和技术的演化,我们尽可能使这种局限性不危及商业目标和运营目标。

        在这样的背景下,Apache Flink(以下简称 Flink)应运而生。Flink 起源于Stratosphere项目,Stratosphere 是在 2010~2014 年由 3 所地处柏林的大学和欧洲的一些其他的大学共同进行的研究项目,2014年4月Stratosphere 的代码被复制并捐赠给Apache软件基金会,参加这个孵化项目的初始成员是Stratosphere 系统的核心开发人员,2014年12月,Flink一跃成为 Apache软件基金会的顶级项目。        

        作为在公共社区中诞生的开源软件,Flink 为大容量数据提供流处理,并用同一种技术实现批处理(批处理是流处理的一种特殊的形式)。

        在 Flink 的开发过程中,开发人员着眼于避免其他流处理方法不得不在高效性或者易用性方面所做的妥协。

        Flink 项目的理念是:“Apache Flink 是为分布式高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架”。

        Apache Flink 是一个框架和分布式处理引擎,用于对无界有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。

 3.初探flink

        3.1事件驱动型应用(Event-driven)

        事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。相反,事件驱动型应用是基于状态化流处理来完成。在该设计中,数据和计算不会分离,应用只访问本地(磁盘或内存)即可获取数据。系统容错性的实现依赖于定期向远程持久化存储写入checkpoint。比较典型的就是以kafka为代表的消息队列几乎都是事件驱动型应用。下图描述了传统应用和事件驱动型应用架构的区别。

        3.2有界流和无界流

        flink是如何同时实现批处理和流处理的呢?答案是,flink将批处理(即处理有限的静态数据)视作一种特殊的流处理。

        Flink的核心计算构造是一个分布式系统,能够接受数据流程序并在一台或多台机器上以容错的方式执行。Flink执行引擎可以视作为YARN的应用程序在集群上运行,也可以在Mesos集群上运行,还可以在单机上运行(这对于调试Flink应用程序来说非常有用)。

        任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或者移动应用程序上的用户交互记录,所有这些数据都形成一种流。数据可以被视作为无界或者有界流来处理。

        无界流数据:无界流有一个开始,但是没有结束,它们不会在生成时终止并提供数据,必须连续处理无界流,也就是说必须在获取后立即处理event。对于无界流我们无法等待所有数据都到达,因为输入是无界的,并在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)获取event,以便能够推断结果完整性。

        有界数据流:有界数据流有明确定义的开始和结束,可以执行任何计算前通过获取说有数据来处理有界流,处理有界流不需要有序获取,因为可以始终对有界数据集进行排序,有界流的处理也称为批处理。

        这种以流为世界观的架构,获得的最大好处就是具有极低的延迟。

         3.3分层 api

        Flink根据抽象程度分层,提供了三种不同的API。每种API在简洁性和表达力上有着不同的侧重,并且针对不同的应用场景。

        ProcessFunction是Flink所挺高的最具表达力的接口。ProcessFunction可以处理一或者两条输入数据流中的单个事件或者归入一个特定窗口内的多个事件。它提供了对于时间和状态的细粒度控制。开发者可以在其中任意的修改状态,也能够注册定时器用以在未来的某一时刻触发回调函数。因此,你可以利用你ProcessFunction实现许多有状态的时间驱动应用所需要的基于单个时间的复杂业务逻辑。

        实际上,大多数应用不需要上述的底层抽象,而是针对核心API(core apis)进行编程。DtaStream API为许多通用的流处理操作提供了处理原语。这些操作包括窗口、逐条记录的转换操作,在处理事件时进行外部数据库查询等。DataStreame API支持Java和scala语言,预先定义了了例如map()、reduce()、aggregate()等函数。你可以通过扩展实现预定义接口或者使用Java、scala的lambda表达式实现自定义的函数。

        Flink支持两种关系型的API,Table API和SQL。这两个API都是哦你处理和流处理统一的API,这意味着在无边界的实时数据流和有边界的历史记录数据流上,关系型API会以相同的语义执行查询,并产生相同的结果。Table API和SQL借助了Apache Calcite来进行查询的解析,校验以及优化。它们可以与DataStream和DataSet API无缝集成,并支持用户自定义的标量函数,聚合函数以及表值函数。Table API是以表为中心的声明式编程,其中表可能会动态变化(在表达流数据时)。Table API遵循关系模型:表有二维数据结构(schema)(类似于关系数据库中的表),同时API提供可比较的操作,例如select、project、join、group-by、aggregate等。Table API程序声明式定义了什么逻辑操作应该执行,而不是准确地确定这些操作代码的看上去如何。

         尽管 Table API 可以通过多种类型的用户自定义函数(UDF)进行扩展,其仍不如核心 API 更具表达能力,但是使用起来却更加简洁(代码量更少)。除此之外,Table API 程序在执行之前会经过内置优化器进行优化。Flink 提供的最高层级的抽象是 SQL 。这一层抽象在语法与表达能力上与Table API 类似,但是是以 SQL 查询表达式的形式表现程序。SQL 抽象与 Table API交互密切,同时 SQL 查询可以直接在 Table API 定义的表上执行。

        目前 Flink 作为批处理还不是主流,不如 Spark 成熟,所以 DataSet 使用的并不是很多。Flink Table API 和 Flink SQL 也并不完善,大多都由各大厂商自己定制。所以我们主要学习 DataStream API 的使用。实际上 Flink 作为最接近 Google DataFlow模型的实现,是流批统一的观点,所以基本上使用 DataStream 就可以了。

        库:Flink 具有数个适用于常见数据处理应用场景的扩展库。这些库通常嵌入在 API 中,且并不完全独立于其它API。它们也因此可以受益于 API 的所有特性,并与其他库集成。

        复杂事件处理(CEP):模式检测是事件流处理中的一个非常常见的用例。Flink 的 CEP 库提供了 API,使用户能够以例如正则表达式或状态机的方式指定事件模式。CEP 库与 Flink 的 DataStream API 集成,以便在 DataStream 上评估模式。CEP 库的应用包括网络入侵检测,业务流程监控和欺诈检测。

        DataSet API:DataSet API 是 Flink 用于批处理应用程序的核心 API。DataSet API 所提供的基础算子包括map、reduce、(outer) join、co-group、iterate等。所有算子都有相应的算法和数据结构支持,对内存中的序列化数据进行操作。如果数据大小超过预留内存,则过量数据将存储到磁盘。Flink 的 DataSet API 的数据处理算法借鉴了传统数据库算法的实现,例如混合散列连接(hybrid hash-join)和外部归并排序(external merge-sort)。

        Gelly: Gelly 是一个可扩展的图形处理和分析库。Gelly 是在 DataSet API 之上实现的,并与 DataSet API 集成。因此,它能够受益于其可扩展且健壮的操作符。Gelly 提供了内置算法,如 label propagation、triangle enumeration 和 page rank 算法,也提供了一个简化自定义图算法实现的 Graph API。

 3.4 flink应用案例

        布衣格电信:法国第三大移动通信运营商,使用 Flink 来进行实时事件处理,每天不间断地分析数十亿条消息。布衣格电信利用 Flink 的流处理能力完成了数据处理和数据迁移,它既满足了低延迟的要求,又具有很高的可靠性、可用性,以及易用性。Flink 为调试工作提供了极大的便利,甚至支持切换到本地进行调试。

        阿里巴巴:阿里巴巴这个庞大的电子商务集团为买方和卖方提供平台。其在线推荐功能是通过基于 Flink 的系统 Blink 实现的。用户当天所购买的商品可以被用作在线推荐的依据,这是使用像 Flink 这样真正意义上的流处理引擎能够带来的好处之一。并且,这在那些用户活跃度异常高的特殊日期(节假日)尤其重要,也是高效的流处理相较于批处理的优势之一。

        King 公司的游戏非常流行,全世界几乎每时每刻都有人在玩它的在线游戏。作为在线娱乐行业的佼佼者,该公司称自己已经开发了 200 多款游戏,市场覆盖 200 多个国家和地区。用 Flink 构建的系统让其数据分析师得以实时地获取大量的流数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值