Flink入门篇
入门篇 初始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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。