Flink入门篇

作者: de8d95a60759 | 来源:发表于2019-07-20 11:43 被阅读126次

    入门篇 初始flink

    接触flink有一段时间了,决定写一些东西,记录和总结一下。

    Flink是什么?

    Apache Flink是一个分布式的大数据处理引擎,可以对有限数据流和无线数据流进行有状态的计算。可以部署在各种集群环境,可以对各种大小规模的数据进行快速计算。

    https://flink.apache.org/

    上图中,可以看出,fink实时接收来自消息队列或者各种类型数据库中的数据,通过flink计算引擎进行处理之后,发送给应用,各种类型数据库,或者消息队列。这就是flink大体上的用途吧。

    上图中提到Flink是一个对有限数据流和无线数据流进行有状态的计算的引擎,下面阐述一下什么是有限数据流和无限数据流。

    有限数据流和无限数据流?

    a)有限数据流:有限不会改变的数据集合--批处理、离线运算

        误区:很多现实中认为是有界或者批量的数据集实际上无限数据流,hdfs目录、kafka

    b) 无限数据流:数据流源源不断的--流式计算、流计算

    举例:

      a) 点击流(终端手机用户或者web应用的点击流)

      b) 物理传感器采集的测量数据

      c) 金融市场产生的数据(股市、数字货币交易市场)

      d) 服务器上的日志数据

    有限数据流和无线数据流有分别对应不同的计算模型

    flink两种计算模型

    a)流式计算、流计算,一直处于运行或者等待运行状态

    b)批处理/离线运算,在预先定义的时间内运行计算,当完成时释放计算机资源

    flink存储介质

    flink存储的数据比如,checkpoint,savepoint数据,已经计算的中间状态数据等。可以存储到hdfs,s3,nfs...。

    flink资源管理

    flink的资源管理引擎,类比于spark,可以是local jvm,k8s,yarn,mesos...,所以我们可以直接在本机上,跑一个flink程序,方便测试。

    总的来说,flink就是一个统一的大数据分析和流处理,批处理以及机器学习引擎,并且是一个生态友好,处处可运行的实时计算框架。

    flink的诞生与发展

    诞生于2009年,原来叫StratoSphere,是柏林工业大学的一个研究性项目,早期专注于批计算;2014年孵化出Flink并捐给Apache;2015年开始引起大家注意;2016年在阿里得到大规模应用; 背后的商业公司叫data artisans

    https://data-artisans.com

    flink开始崭露头角,并区别于其他的流计算引擎的主要特点: 它不仅是一个高吞吐,低延迟的计算引擎,同时还具备其他的高级特性,提供有状态的计算,支持状态管理,支持强一致性的语义,以及支持EventTime和waterMark 对消息乱序的处理。这也是阿里看上flink的原因,并决心投入重金研究基于flink的blink。

    flink众多优点

    支持批处理和流处理

    优雅流畅的支持java和scala

    高吞吐量和低延迟

    支持事件处理和无序处理通过SataStream API,基于DataFlow数据流模型

    在不同的时间语义(事件时间,摄取时间、处理时间)下支持灵活的窗口(时间,滑动、 翻滚,会话,自定义触发器)

    仅处理一次的容错担保,通过event time & watermarker

    自动背压机制,下游对上游的反压。

    图处理(批) 机器学习(批) 复杂事件处理(流)

    在dataSet(批处理)API中内置支持迭代程序(BSP)

    高效的自定义内存管理,和健壮的切换能力在in-memory和out-of-core中

    兼容hadoop的mapreduce和storm

    集成YARN,HDFS,Hbase 和其它hadoop生态系统的组件,丰富的connector

    flink的核心组件和生态

    核心组件

    Deploy:

    flink可以运行在Single JVM,Standalone,YARN,S3.

    Core:

    flink的核心是Distributed streaming Dataflow

    API:

    基于flink core 是两大核心API DataStream API&DataSet API

    Libraries:

    基于核心API,有一些扩展的library,例如基于DataStream API的CEP,Table&SQL,基于DataSet API的Flink ML ,Gelly,Table&SQL,值得注意的是,Table&SQL可以同时运行流数据和批数据集合。

    flink的生态

    flink可以和大数据生态圈绝大多数的组建进行交互,当然了,目前来说,还没有spark支持的组建多,这也是flink未来努力的方向。

    从图中可以看出,目前主流的大数据相关组件,都可以和flink整合。

    flink的未来

    批流统一

    多语言支持

    完善ml算法库,提供更多机器学习,深度学习相关的支持。

    flink 的应用场景

    Event-driven Applications

    Data Analytics Applications

    Data Pipeline Applications

    具体可参考:https://flink.apache.org/usecases.html

    事件驱动的应用程序不是查询远程数据库,而是在本地访问其数据,从而在吞吐量和延迟方面产生更好的性能。远程持久存储的定期检查点可以异步和递增完成。因此,检查点对常规事件处理的影响非常小。

          Flink提供了一组丰富的状态原语,可以管理非常大的数据量(最多几TB),并且具有一次性的一致性保证。此外,Flink支持事件时间,高度可定制的窗口逻辑,以及通过ProcessFunction实现高级业务逻辑提供的细粒度时间控制。此外,Flink还提供了一个用于复杂事件处理(CEP)的库,用于检测数据流中的模式。

    典型的应用场景:

    欺诈识别

    异常检测

    基于规则的警报

    业务流程监控

    Web应用程序(社交网络)

    数据分析应用

          与批量分析相比,连续流分析的优势不仅限于因消除定期导入和查询执行的延迟。与批量查询相比,流式查询不必处理输入数据中的人为边界(比如过了凌晨12点开始T+1执行),这些边界是由定期导入和输入的有界性质引起的。

          Flink为连续流式传输和批量分析提供了非常好的支持。具体来说,它具有符合ANSI标准的SQL接口,具有用于批处理和流式查询的统一语义。无论是在记录事件的静态数据集上还是在实时事件流上运行,SQL查询都会计算相同的结果。对用户定义函数的丰富支持可确保在SQL查询中执行自定义代码。如果需要更多的自定义逻辑,Flink的DataStream API或DataSet API提供更多的低级控制。此外,Flink的Gelly库为批量数据集上的大规模和高性能图形分析提供算法和构建块。

    典型应用场景:

    电信网络的质量监控

    分析移动应用程序中的产品更新和实验评估

    对消费者技术中的实时数据进行特别分析

    大规模图分析

    Data pipeline应用

          连续数据流水线优于周期性ETL作业的明显优势是减少了将数据移动到目的地的延迟。此外,数据管道更通用,可用于更多用例,因为它们能够连续消耗和发送数据。

          Flink的SQL接口(或表API)可以解决许多常见的数据转换或丰富任务,并支持用户定义的函数。通过使用更通用的DataStream API,可以实现具有更高级要求的数据管道。Flink为各种存储系统(如Kafka,Kinesis,Elasticsearch和JDBC数据库系统)提供了丰富的连接器。它还具有连续的文件系统源,用于监视以时间分区方式写入文件的目录和接收器。

    典型应用场景:

    电子商务中的实时搜索索引构建

    电子商务中持续的ETL

    阿里flink实时计算应用场景

    阿里flink实践案例分析

    下面是一个实践案例,更多案例请参考

    https://help.aliyun.com/product/45029.html?spm=a2c4g.11186623.3.1.70b863caaaH5S0

    基于实时计算,您可以轻松完成实时欺诈检测系统。 实时欺诈检测系统能够及时发现用户高危行为并采取措施,降低损失。

    实时欺诈检测(风控)系统流程如下:

    用户的行为经由App上报或Web日志记录下来,发送到一个消息队列里去。

    实时计算订阅消息队列,过滤出感兴趣的行为,比如:购买、领券、浏览等。

    实时计算计算把这个行为特征化。

    实时计算通过UDF调用外部一个风险模型,判断这次行为是否有问题(单次行为)。

    实时计算里通过CEP功能,跨多条记录分析用户行为(比如用户先做了A,又做了B,又做了3次C),整体识别是否有风险。

    综合风险模型和CEP的结果,产出预警信息。

    flink vs spark vs storm ...

    spark 和 flink的对比我们可以从编程模型,扩展的类库,支持的语言,运行环境等方面进行比较。

    详细可以参考:

    https://blog.csdn.net/aWDac/article/details/83583247

    而flink 和其他的实时流引擎的对比如下图:

    从图中可以看出,想比如其他的实时处理引擎flink的明显优势是,保证exactly once的语义,并且具有低延迟,高吞吐等优点,并且越来越广泛的被应用。

    总结:

    这篇文章我们阐述了flink是什么,有限数据集,无线数据集的概念;flink的编程模型,存储介质,资源管理框架;flink的诞生与发展,flink的众多优点,核心组件与生态;以及阿里flink的使用场景,真实案例,最后对flink和spark以及其他实时流处理框架进行了比较。现在我们对flink应该有了大致的了解。

    程序员升职加薪,可以联系我们

    作者:流水设计V:13136173369或者Q:3139496932

    链接:https://www.jianshu.com/p/f390f71a80d6

    来源:简书

    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

        本文标题:Flink入门篇

        本文链接:https://www.haomeiwen.com/subject/ugiylctx.html