flink架构介绍
前言
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架构介绍的更多相关文章
- Flink入门(二)——Flink架构介绍
1.基本组件栈 了解Spark的朋友会发现Flink的架构和Spark是非常类似的,在整个软件架构体系中,同样遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富 ...
- Apache Flink 整体介绍
前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...
- Flink架构,源码及debug
序 工作中用Flink做批量和流式处理有段时间了,感觉只看Flink文档是对Flink ProgramRuntime的细节描述不是很多, 程序员还是看代码最简单和有效.所以想写点东西,记录一下,如果能 ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 从零开始编写自己的C#框架(5)——三层架构介绍
三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...
- SOA架构介绍和理解
SOA架构介绍和理解 SOA的正确方法论及目标模型,其实SOA在实现架构落地上,需要考虑到对服务的组合,不断的重用现有的服务,让企业应用可以逐步集成,快速实现业务的迭代. 通过SOA架构分层将服务按照 ...
- MemSQL分布式架构介绍(一)
最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ ...
- Apache Shiro 使用手册(一)Shiro架构介绍 - kdboy - ITeye技术网站
转载 原文地址 http://kdboy.iteye.com/blog/1154644 一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理 ...
- Apache Shiro 使用手册(一)Shiro架构介绍
一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户"登录": 授权 - ...
随机推荐
- LeetCode-104.Maxinum Depth of Binary Tree
Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longe ...
- Mirror--如何TSQL查看镜像状态和镜像相关存储过程
--==================================================== --查看镜像状态 SELECT DB_NAME(database_id) AS Datab ...
- OC convertRect
举个例子: redView = [[UIView alloc]initWithFrame:CGRectMake(50, 100, 100, 100)]; redView.backgroundColor ...
- HandlerSocket
HandlerSocket http://www.uml.org.cn/sjjm/201211093.asp 目录: HandlerSocket的原理 HandlerSocket的优势和缺陷阐述 Ha ...
- Ubuntu 下Apache安装和配置
在Ubuntu上安装Apache,有两种方式:1 使用开发包的打包服务,例如使用apt-get命令:2 从源码构建Apache.本文章将详细描述这两种不同的安装方式. 方法一:使用开发包的打包服务—— ...
- selenium webdriver窗口切换(下)
多窗口切换有时候需要在不同的窗口切换,从而操作不同的窗口上的元素.在selenium1.0 中这个问题比较难处理.但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口. ...
- mysql导入数据方法和报错解决
mysql -u root -p databasename < db.sql 数据库导入数据时,MySQL收到下面异常:ERROR 1153 (08S01): Got a packet bigg ...
- 024-linux中动态库libXXX.so
1.动态库的概念.动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现.通过shared和fPIC编译参数生产so动态链接库文件.程序在调用库函数时,只需要连接上这个库即可. 2.动态 ...
- java的时间处理
采用joda.time库 gradle,可以简化calendar的 compile "joda-time:joda-time:2.7" 例子:http://blog.csdn.ne ...
- VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件.本节开始鸡啄米将为大家讲解菜单的概念及使用. 菜单简介 菜单在界面设计中 ...