绵阳远腾建设网站,网站无域名注册人id,wordpress主题 自适应,图片在线高清处理一、什么是Flink 1. Flink是一个开源的分布式#xff0c;高性能#xff0c;高可用#xff0c;准确的流处理框架 #xff08;1#xff09;分布式#xff1a;表示flink程序可以运行在很多台机器上#xff0c; #xff08;2#xff09;高性能#xff1a;表示Flink处理性…一、什么是Flink 1. Flink是一个开源的分布式高性能高可用准确的流处理框架 1分布式表示flink程序可以运行在很多台机器上 2高性能表示Flink处理性能比较高 3高可用表示flink的稳定性和可用性是比较好的。 4准确的表示flink可以保证处理数据的准确性。 2. Flink支持流(Stream)处理和批处理(Batch) 其实对于flink而言它是一个流处理框架批处理只是流处理的一个极限特例而已。 左边是数据源从这里面可以看出来这些数据是实时产生的一些日志或者是数据库、文件系统、kv存储系统中的数据。中间是Flink负责对数据进行处理。右边是目的地Flink可以将计算好的数据输出到其它应用中或者存储系统中。二、Flink架构图 首先图片最下面表示是flink的一些部署模式支持local和集群(standaloneyarn)也支持在云上部署。往上一层是flink的核心分布式的流处理引擎。再往上面是flink的API和类库。主要有两大块APIDataStram API和DataSet API分别做流处理和批处理。针对DataStram API这块支持复杂事件处理和table操作其实也是支持SQL操作的。针对DatasetAPI 这块支持flinkML机器学习Gelly图计算table操作这块也是支持SQL操作的。其实从这可以看出来Flink也是有自己的生态圈的里面包含了实时计算、离线计算、机器学习、图计算、Table和SQL计算等等。所以说它和Spark还是有点像的不过它们两个的底层计算引擎是有本质区别的一会我们会详细分析。
三、Flink三大核心组件 Flink包含三大核心组件
Data Source数据源(负责接收数据)Transformations 算子(负责对数据进行处理)Data Sink 输出组件(负责把计算好的数据输出到其它存储介质中)四、Flink的流处理与批处理 1. 在大数据处理领域批处理和流处理一般被认为是两种不同的任务一个大数据框架一般会被设计为只能处理其中一种任务。 例如Storm只支持流处理任务而MapReduce、Spark只支持批处理任务。Spark Streaming是Spark之上支持流处理任务的子系统看似是一个特例其实并不是——Spark Streaming采用了一种micro-batch的架构就是把输入的数据流切分成细粒度的batch并为每一个batch提交一个批处理的Spark任务所以Spark Streaming本质上执行的还是批处理任务和Storm这种流式的数据处理方式是完全不同的。 2.Flink通过灵活的执行引擎能够同时支持批处理和流处理。在执行引擎这一层流处理系统与批处理系统最大的不同在于节点之间的数据传输方式。 1对于一个流处理系统其节点间数据传输的标准模型是当一条数据被处理完成后序列化到缓存中然后立刻通过网络传输到下一个节点由下一个节点继续处理这就是典型的一条一条处理。 2而对于一个批处理系统其节点间数据传输的标准模型是当一条数据被处理完成后序列化到缓存中并不会立刻通过网络传输到下一个节点当缓存写满的时候就持久化到本地硬盘上当所有数据都被处理完成后才开始将处理后的数据通过网络传输到下一个节点。 3这两种数据传输模式是两个极端对应的是流处理系统对低延迟的要求和批处理系统对高吞吐量的要求。Flink的执行引擎采用了一种十分灵活的方式同时支持了这两种数据传输模型 Flink以固定的缓存块为单位进行网络数据传输用户可以通过缓存块超时值指定缓存块的传输时机。如果缓存块的超时值为0则Flink的数据传输方式类似前面所说的流处理系统的标准模型此时系统可以获得最低的处理延迟如果缓存块的超时值为无限大则Flink的数据传输方式类似前面所说的批处理系统的标准模型此时系统可以获得最高的吞吐量这样就比较灵活了其实底层还是流式计算模型批处理只是一个极限特例而已。 3. 三种数据传输模型 第一个一条一条处理 第二个一批一批处理 第三个按照缓存块进行处理缓存块可以无限小也可以无限大这样就可以同时支持流处理和批处理 了。
五、Storm vs SparkStreaming vs Flink 解释
Native表示来一条数据处理一条数据Mirco-Batch表示划分小批一小批一小批的处理数据组合式表示是基础API例如实现一个求和操作都需要写代码实现比较麻烦代码量会比较多。声明式表示提供的是封装后的高阶函数例如filter、count等函数可以直接使用比较方便代码量比较少。
六、实时计算框架如何选择
1需要关注流数据是否需要进行状态管理 2消息语义是否有特殊要求At-least-once或者Exectly-once 3小型独立的项目需要低延迟的场景建议使用Storm 4如果项目中已经使用了Spark并且秒级别的实时处理可以满足需求建议使用SparkStreaming 5要求消息语义为Exectly-once数据量较大要求高吞吐低延迟需要进行状态管理建议选择Flink