前言

flink作为基于流的大数据计算引擎,可以说在大数据领域的红人,下面对flink-1.7的架构进行逻辑上的分析并和spark做了一些关键点的对比。

架构

如图1,flink架构分为3个部分,client,JobManager(简称jm)和TaskManager(简称tm)。client负责提交用户的应用拓扑到jm,注意这和spark的driver用法不同,flink的client只是单纯的将用户提交的拓扑进行优化,然后提交到jm,不涉及任何的执行操作。jm负责task的调度,协调checkpoints,协调故障恢复等。tm负责管理和执行task。通过flink的架构我们可以了解到,flink把任务调度管理和真正执行的任务分离,这里的分离说的是物理分离。而对比spark的调度和执行任务是在一个jvm里的,也就是driver。分离的好处很明显,不同任务可以复用同一个任务管理(jm,tm),避免多次提交,缺点可能就是多了一个步骤,需要额外提交维护tm。

图1 架构

flink架构中另一个重要的概念是slot,在tm中有一个slot的概念,这个概念类似storm里的slot,用来控制并发度的,但不同于storm,flink的slot控制的是线程。首先1个tm对应1个jvm,然后并发度task对应一个线程,而slot就代表1个tm中可以执行的最大的task数。此外,task被tm管理,但是目前只会对内存进行管理,cpu是不做限制的。建议slot的数量和该节点的cpu数量保持一致。

部署策略

flink支持多种部署策略,独立部署模式或者基于其他资源容器yarn,mesos。

standalone

不依赖第三方资源容器进行部署,部署相对麻烦,需要将jm,tm分别部署到多个节点中,然后启动,一般不建议单独部署。

yarn

基于yarn的部署是比较常见的,flink提供了两种基于yarn的提交模式,attached和detached。无论是jb和tm的提交还是任务的提交都支持这两种模式。和spark基于yarn的两种模式不同,flink的这两种模式仅仅只是在client端阻塞和非阻塞的区别,attached模式会hold yarn的session直到任务执行结束,detached模式在提交完任务后就退出client,这个区别是很简单的。结合flink的架构来看,client不参与任何任务的执行,这点和spark是有很大区别的,不要搞混。

调度

flink同样采用了基于图的调度策略,client生成图然后提交给jm,jm解析后执行。但是flink的对task的执行思路和spark不同,spark是基于一个操作的并发,而flink是基于操作链的并发,这里先解释一下操作链,比如source(),map(),filter()这些都是操作,操作链就是多个连续的操作合并到一起,如图2,source(),map()形成一个操作链,keyBy(),window(),apply()[1]形成一个操作链。flink这样设计的目的在于,操作链中的所有操作可以使用一个线程来执行,这样可以避免多个操作在不同线程执行带来的上下文切换损失,并且可以直接在一个jvm中共享数据,这个思路可以说是一种新的优化思路。图3可以从一个任务的角度看到flink的并发思路。

图2

图3

总结

从架构上来看,flink也采用了常见的主从模型,不过不用担心flink已经支持了对jm的ha,很多地方可以看到其他大数据计算引擎的影子,在选择计算引擎的时候可以尝试一下。

参考

// flink官网对分布式执行环境的介绍

https://ci.apache.org/projects/flink/flink-docs-release-1.7/concepts/runtime.html

// flink官网对调度的介绍

https://ci.apache.org/projects/flink/flink-docs-release-1.7/internals/job_scheduling.html

flink架构介绍的更多相关文章

  1. Flink入门(二)——Flink架构介绍

    1.基本组件栈 了解Spark的朋友会发现Flink的架构和Spark是非常类似的,在整个软件架构体系中,同样遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富 ...

  2. Apache Flink 整体介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  3. Flink架构,源码及debug

    序 工作中用Flink做批量和流式处理有段时间了,感觉只看Flink文档是对Flink ProgramRuntime的细节描述不是很多, 程序员还是看代码最简单和有效.所以想写点东西,记录一下,如果能 ...

  4. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  5. 从零开始编写自己的C#框架(5)——三层架构介绍

    三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...

  6. SOA架构介绍和理解

    SOA架构介绍和理解 SOA的正确方法论及目标模型,其实SOA在实现架构落地上,需要考虑到对服务的组合,不断的重用现有的服务,让企业应用可以逐步集成,快速实现业务的迭代. 通过SOA架构分层将服务按照 ...

  7. MemSQL分布式架构介绍(一)

    最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ ...

  8. Apache Shiro 使用手册(一)Shiro架构介绍 - kdboy - ITeye技术网站

    转载 原文地址 http://kdboy.iteye.com/blog/1154644 一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理 ...

  9. Apache Shiro 使用手册(一)Shiro架构介绍

    一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能:  认证 - 用户身份识别,常被称为用户"登录": 授权 - ...

随机推荐

  1. 【Python】百度贴吧-中国好声音评论爬爬【自练OK-csv提取格式及评论提取空格等问题待改进】

    代码编写思路: 学习知识点: 1.class=a b(a假设是字体-宋体,b是颜色-蓝色:class中可以同时有两个参数a,b(宋体+蓝色),两者用空格隔开即可) 2.拓展1:想要soup到某个元素, ...

  2. linux mysql 统一字符编码

    强调:配置文件中的注释可以有中文,但是配置项中不能出现中文 mysql> show variables like '%char%'; +--------------------------+-- ...

  3. 二进制协议 vs 文本协议

    二进制协议 vs 文本协议 在服务器程序开发过程中,各个服务直接需要进行交互.这样就需要定义消息的协议,一般来说协议主要包括二进制协议和文本协议,下面就我在工作中用到的两种协议说说自己的看法. 1 二 ...

  4. 主成分分析(PCA)算法,K-L变换 角度

    主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数 量的特征对样本进行描述以达到降低特征空间维数的方法,它的本质实际上是K-L变换.PCA方法最著名的应用应该是在人脸识别中特 ...

  5. Object-C-NSString

    NSString *info=@"Hello world"; NSString *info=[[NSString alloc]initWithFormat:@"my na ...

  6. 代码静态检查Eclipse插件:SonarLint插件离线安装

    Eclipse Version: Oxygen.3a Release (4.7.3a)Myeclipse版本: 10.7 SonarLint 插件离线安装包:org.sonarlint.eclipse ...

  7. zookeeper 详解

    是 分布式 协调 服务. ZK的工作:注册:所有节点向ZK争抢注册,注册成功会建立一套节点目录树,先注册的节点为Active节点,后注册节点成为standby;监听事件:节点在ZK集群里注册监听动作: ...

  8. python环境安装selenium和手动下载安装selenium的方法

    方法1:cmd环境下,用pip install selenium 可能会很慢 方法2:下载selenium安装包手动安装 下载地址:https://pypi.org/project/selenium/ ...

  9. Linux基础命令---bzcat

    bzcat 解压缩被bzip2压缩过的文件,将文件解压到标准输出,此命令只有一个选项-s.该指令对压缩过的二进制文件没有意义,因为二进制文件没有可读性. 此命令的适用范围:RedHat.RHEL.Ub ...

  10. 如何禁用MySql总是定时弹出一个MySQLInstallerConsole.exe的窗口

    如何禁用MySql总是定时弹出一个MySQLInstallerConsole.exe的窗口 禁用mysql总是弹出一个安装框的定时任务这一条安装命令,Installing MySQL 5.6.21 u ...