【Flink系列1】flink与spark的区别

2023-11-13


Flink简介


spark基本架构



flink基本架构


Spark提出的最主要抽象概念是弹性分布式数据集(RDD)


flink支持增量迭代计算。基于流执行引擎,Flink提供了诸多更高抽象层的API以方便用户编写分布式任务:

1. DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便的采用Flink提供的各种操作符对分布式数据集进行各种操作,支持Java,Scala和Python。

2. DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便的采用Flink提供的各种操作符对分布式数据流进行各种操作,支持Java和Scala。

3. Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过Flink提供的类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。

此外,Flink还针对特定的应用领域提供了领域库,例如:

1. Flink ML,Flink的机器学习库,提供了机器学习Pipelines API以及很多的机器学习算法实现。

2. Gelly,Flink的图计算库,提供了图计算的相关API以及很多的图计算算法实现。

Spark Streaming是Apache Spark之上支持流处理任务的子系统,看似一个特例,实则不然。Spark Streaming采用了一种micro-batch的架构,即将输入的数据流切分成细粒度的batch数据,对于每一个batch数据,以此为输入提交一个批处理Spark任务,所以Spark Streaming本质上还是基于Spark批处理系统对流式数据进行处理,和Apache Storm,Apache Smaza等完全流式的数据处理方式完全不同。Flink能够同时处理批处理任务与流处理任务,其灵活的执行引擎支持完全原生的批量的数据处理和流式的数据处理。

在执行引擎这一层, 流处理系统与批处理系统最大的不同在于节点间数据传输的方式。对于一个流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理。而对于一个批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久化到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点。


这两种数据传输模式是两个极端,对应的是流处理系统对低延迟的要求和批处理系统对高吞吐量的要求。Flink的执行引擎采用了一种十分灵活的方式,同时支持了这两种数据传输模型。Flink以固定的缓存块为单位进行网络数据传输,用户可以通过缓存块超时值指定缓存块的传输时机。如果缓存块的超时值为0,则Flink的数据传输方式类似上面提到的流处理系统的标准模型,此时系统可以获得最低的处理延迟。如果缓存块的超时值为无限大,则Flink的数据传输方式类似上面提到的批处理系统的标准模型,此时系统可以获得最高的处理吞吐量。同时缓存块的超时值也可以设置为0到无限大之间的任意值。缓存块的超时阈值越小,则Flink流处理执行引擎的数据处理延迟越低,但吞吐量也会越低,缓存块的超时阈值越大时,则反之。通过调整缓存块的超时阈值,用户可根据自己的需要灵活的权衡Flink的延迟和吞吐量


性能对比

首先它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink计算性能上略好。

测试环境:

  1. CPU:7000个;
  2. 内存:单机128GB;
  3. 版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9
  4. 数据:800MB,8GB,8TB;
  5. 算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
  6. 迭代:K=10,3组数据

迭代次数(纵坐标是秒,横坐标是次数)

总结:Spark和Flink全部都运行在Hadoop YARN上,性能为Flink > Spark > Hadoop(MR),迭代次数越多越明显,性能上,Flink优于Spark和Hadoop最主要的原因是Flink支持增量迭代,具有对迭代自动优化的功能。

流式计算比较

它们都支持流式计算,Flink是一行一行处理,而Spark是基于数据片集合(RDD)进行小批量处理,所以Spark在流式处理方面,不可避免增加一些延时。Flink的流式计算跟Storm性能差不多,支持毫秒级计算,而Spark则只能支持秒级计算


问题

谬论1:延迟和吞吐量:只能选择一个

早期的开源流处理框架要么是“高吞吐”的,要么是“低延迟”的,而“海量且快速”一直未能成为开源流处理框架的代名词。

不过Flink(可能还有其它的框架)就同时提供了高吞吐和低延迟。这里有一个基准测试结果的样例。

让我们从底层来剖析这个例子,特别是从硬件层,并结合具有网络瓶颈的流处理管道(很多使用Flink的管道都有这个瓶颈)。在硬件层不应该存在需要作出权衡的条件,所以网络才是影响吞吐量和延迟的主要因素。

一个设计良好的软件系统应该会充分利用网络的上限而不会引入瓶颈问题。不过对Flink来说,总是有可优化的空间,可以让它更接近硬件所能提供的效能。使用一个包含10个节点的集群,Flink现在每秒可以处理千万级别的事件量,如果扩展到1000个节点,它的延迟可以降低到几十毫秒。在我们看来,这种水平已经比很多现有的方案高出很多。




参考:

http://www.csdn.net/article/2015-07-16/2825232

http://mobile.51cto.com/adatabase-524305.htm

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Flink系列1】flink与spark的区别 的相关文章

  • linux开放tomcat8080端口,防火墙开启/关闭/状态查询

    linux开放tomcat8080端口 防火墙开启 关闭 状态查询 最终效果 开放8080端口成功访问tomcat页面 要实现开放端口8080有两种方式 仅限于我所知道的 条条大路通罗马 能实现功能就行 废话不多说上干货 一是单独开放808

随机推荐

  • github 如何删除不需要的项目(两种方法)

    在Github上删除项目是一项非常基本的操作 但是对于很多使用者来说 却可能会因为缺乏经验而无从下手 如果你也处于这个情况 那么这篇文章就为你提供了一些详细的指导 删除Github上的项目可以采用两种方式 通过网站进行删除 或者通过Git客
  • JavaScript中的promise

    概述 promise 承诺 是异步编程的一种解决方案 可以替代传统的解决方案 回调函数和事件 ES6统一了用法 并原生提供了Promise对象 promise是异步编程的一种解决方案 什么时候我们会来处理异步事件呢 一种很常见的场景就应该是
  • [1228]Python prometheus-client使用方式

    文章目录 安装 prometheus client 基本使用介绍 应用实例 收集 CPU 使用率指标 收集自定义指标 Python封装 调用 github https github com prometheus client python
  • MkDocs全文搜索中的中文支持

    在前一篇MkDocs全文搜索中使用模糊匹配中已经实现了模糊匹配 这次通过lunr languages来实现lunr对中文搜索的支持 MkDocs版本 v0 16 3 lunr js版本2 0 3 lunr languages版本1 0 0
  • Linux配置tomcat

    Linux配置tomcat 1 下载tomcat tomcat官网 https tomcat apache org 2 上传tomcat到Linux 将下载的tomcat上传到linux的并解压 3 运行tomcat 启动tomcat之前要
  • C#中的拆装箱,与object类型紧密相关

    class Program static void Main string args Console WriteLine Hello World int a 1 装箱操作 比较消耗性能 最 box 值类型隐式转换为object类型或由此值类
  • Oracle字符串拆分

    文章目录 Oracle字符串拆分 1 使用regexp substr 函数 1 1 拆分aaa bbb ccc 1 2 拆分aaa bbb ccc 1 3 level作用 2 在oracle中实现MySQL的find in set 函数 2
  • shell脚本循环插入参数到另外一个shell脚本

    bin bash cd var lib hadoop hdfs reflush array 0 1 2 for i 0 i lt array i do startKey array i let n i 1 let m array 如果当前值
  • 【SSA-LSTM】基于麻雀算法优化LSTM 模型预测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 麻雀搜索算法 1 2 长短期记忆神经网络 2 运行结果 3 参考文献 4 Matlab代码实现 1
  • CryptoPP的 Timer算法的使用

    密码学库Cryptopp不仅给提供了丰富的密码学算法 而且还包含了一些有用的工具类算法 比如本次要讲到的Timer 使用该类定义的对象 可以在程序中统计某一段代码的运行时间 前面我们在讲解随机数发生器的使用的时候 在程序中用到统计产生1G
  • 分布式日志系统的设计和实践

    什么是日志 日志是一种按照时间顺序存储记录的数据 它记录了什么时间发生了什么事情 提供精确的系统记录 根据日志信息可以定位到错误详情和根源 按照APM概念的定义 日志的特点是描述一些离散的 不连续的 事件 日志是按照错误级别分级的 常见的错
  • matlab 逆否,逆否命题与反证法

    在原命题 逆命题 否命题与逆否命题中 原命题与逆否命题等价 同真同假 所以证明一个命题成立可以去证明它的逆否命题成立 即先否定结论 在这个否定的结论下 去推出原来的条件的否定成立 例题一 1 判断命题 如果 x y neq 3 那么 x n
  • Python使用xlwt和xlrd读写excel文件

    Python使用xlwt和xlrd读写excel文件 xlwt和xlrd是两个相互配套的模块 在Python中 用于将数据写入Excel文件和读取Excel文件的数据 从字面即可看出xlwt是对xls格式的文件进行write xlrd是对x
  • nvidia-docker踩坑记录

    docker nvidia docker配置镜像创建容器 众所周知 想要在容器中使用nvidia的显卡 需要使用nvidia docker命令创建容器 环境说明 服务器端为Ubuntu18 04离线 nvidia smi正常使用 CUDA版
  • APIPOST入门+认识接口(前后端分离)

    APIPOST入门 认识接口 前后端分离 文章目录 APIPOST入门 认识接口 前后端分离 啥是 API 接口 笑话小案例 编写mock数据 如何解决跨域问题 后续要解决的 实战二维码 驾照题库实战项目 自己写一个接口 2 post和ge
  • 6:sort_values,loc,corr数据筛选,绘图

    一 使用sort values 对某一列 进行从小到大或者从大到小的排序 1 对一列进行操作 import pandas as pd df pd read excel r C Users 73575 Desktop 北京新发地菜价 xlsx
  • 整型的提升和截断详解(看完包会)

    所有常量值 在没有后缀得情况下 默认是4个字节 int型 将一个int型值赋给char型变量时 会发生整形截断 按存储顺序截断 先到先截 一个char截断一个字节即8个bit位 将char类型值按有常量值 在没有后缀得情况下 默认是4个字节
  • linux常用库 对应函数

    1 include
  • Vue在线引入地址

    Vue在线引入地址 vue2 vue3 CodePan在线运行ElementUI时添加的JS及CSS引用地址 Vue https cdn jsdelivr net npm vue 2 dist vue
  • 【Flink系列1】flink与spark的区别

    Flink简介 spark基本架构 flink基本架构 Spark提出的最主要抽象概念是弹性分布式数据集 RDD flink支持增量迭代计算 基于流执行引擎 Flink提供了诸多更高抽象层的API以方便用户编写分布式任务 1 DataSet