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安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户"登录": 授权 - ...
随机推荐
- 实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC)的形式,共享在另外一个2008服务器上
转载:http://www.cnblogs.com/top5/archive/2012/12/10/2812133.html 目的:实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC) ...
- 配合dedecms内容模型实现后台输入栏目id前端输出文章列表
为了简化开发的工作量,也方便编辑快速操作,决定将后台进行重新设置.配合dedecms内容模型实现后台输入栏目id前端输出文章列表,这样制作科室专题页也变快了很多.比如,我们添加一个“科室专家栏目id” ...
- [py]python的继承体系-源码目录结构
python3安装目录 pip install virtualenv pip install virtualenvwrapper pip install virtualenvwrapper-win m ...
- hdu1166敌兵布阵&&hdu1754I Hate It(线段树入门)
单点更新是最最基础的线段树,只更新叶子节点,然后把信息用pushup这个函数更新上来. http://acm.hdu.edu.cn/showproblem.php?pid=1166 update单点更 ...
- Ng线性回归实现学习[转载]
转自:https://github.com/huanting74/Coursera-ML-AndrewNg 1.可视化数据 import pandas as pd import seaborn as ...
- 20180531-Postman 常用测试结果验证及使用技巧
- NLP语料库
文本语料库是一个大型结构化文本的集合 NLTK包含了许多语料库: (1)古滕堡语料库 (2)网络和聊天文本 (3)布朗语料库 (4)路透社语料库 (5)就职演讲语料库 (6)标注文本语料库 词汇列表 ...
- EXTJS 4:在renderer中如何控制一个CheckColumn的行为,如显示,只读等属性
在编写grid下的column时,大家肯定会经常用到renderer这个方法来改变文字的呈现形式,那么如果该column是一个特殊的column,比如CheckColumn时,该方法应该怎样写呢?官方 ...
- HTML 显示/隐藏DIV的技巧(visibility与display的差别)
参考链接:http://blog.csdn.net/szwangdf/article/details/1548807 div的visibility可以控制div的显示和隐藏,但是隐藏后页面显示空白: ...
- c++中的构造(包括移动),赋值(包括移动),析构详解
这五种操作:构造(包括移动),赋值(包括移动),析构其实就是定义了对一个对象进行构造,赋值,析构时的行为.理解这些行为并不复杂,复杂的是理解在继承下这些行为的表现.需要注意的是他们并不会被继承(传统意 ...