系列文章目录

Flink/Blink 原理漫谈(零)运行时的组件

Flink/Blink 原理漫谈(一)时间,watermark详解

Flink/Blink 原理漫谈(二)流表对偶性和distinct详解

Flink/Blink 原理漫谈(三)state 有状态计算机制 详解

Flink/Blink 原理漫谈(四)window机制详解

Flink/Blink 原理漫谈(五)流式计算的持续查询实现 详解

Flink/Blink 原理漫谈(六)容错机制(fault tolerance)详解


文章目录

  • 系列文章目录
  • 前言 谈谈blink和flink
  • Blink原理漫谈
  • 零、 Flink运行时的组件
    • JobManager
    • TaskManager
    • ResourceManager
    • Dispatcher
    • 任务提交流程
    • TaskManger和slot

前言 谈谈blink和flink

在实习时候接触到了flink,这玩意实现了大促期间的实时大数据更新,这对我们这种只写过python,c++啥玩意的来说闻所未闻,所以了解了一下flink的原理,并且尝试使用了公司的blink,在学习时间之余,整理了所有的学习笔记,目的也是分享学习。

Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有 状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模 来执行计算。

Blink是阿里巴巴实时计算部通过改进开源Apache Flink项目而创建的阿里内部产品。简单的说Blink就是阿里巴巴开发的Flink 企业版。

这俩东西最大的不同其实我感觉,就是blink在公司应用起来是一个十分上层的api,语法基本都是sql,只需要加上with后面的参数就可以实现很多流式计算的功能,使用起来十分方便,即使有些复杂功能不好用sql直接实现也可以使用udf补充实现;而flink使用更多的是datastream api,还是要用java写的,一些函数的使用需要去一步一步熟悉,相对来说,还是复杂了很多,其实flink也有sql api,但是功能不完善,很离谱,我竟然在完全开发完成之前就已经在学习了。总之,blink虽好,但是是人家内部用,flink也好,但是使用也是略微门槛要高一丢丢,我看到阿里云好像有flink,那个版本的应该也可以使用最上层的api,这个就不是特别了解了。


Blink原理漫谈

这部分内容来自blink漫谈系列ata,以及网络中关于flink原理的讲解和一些知识分享视频。我认为想要理解flink原理,可以先尝试从头到尾阅读一下《blink漫谈》,大概是有十篇左右,这部分其实讲的很好,但是如果有点糊涂,那还是和我一样……拿着一本书先啃吧,看完一本介绍flink的书,再看这一部分,就感觉很好理解了。话不多说,我尝试用简单的语言讲一下blink/flink的比较重要的实现原理。

零、 Flink运行时的组件

Flink 运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作: 作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager), 以及分发器(Dispatcher)。因为 Flink 是用 Java 和 Scala 实现的,所以所有组件都会运行在 Java 虚拟机上。
下图是整个flink的架构

JobManager

控制一个应用程序的主进程
接受要制定的应用程序:作业图(JobGraph),逻辑数据流图(Logic dataflow graph),打包了的jar包
JobManager将JobGraph转换成一个物理层面的数据流图(执行图execution Graph),包含所有可并发执行的任务。

TaskManager

Flink中的工作进程,通常会有多个TaskManager运行。
每个TaskManager中含一定量slot
TaskManger会向ResourceManager中注册它的插槽
TaskManager收到ResourceManager的指令后,会将slot供JobManager调用(JobManager流程图的第二步的后续)
JobManager可向slot分配任务来执行
运行同一任务的TaskManager可相互交换数据

TaskManager与JobManager的关系如图

ResourceManager

负责管理TaskManager的slot
不同环境有不同的ResourceManager

Dispatcher

为应用提供了REST接口,启动web,ui,展示监控作业的执行信息
应用被提交执行->Dispatcher启动->将应用移交给一个JobManager

任务提交流程

TaskManger和slot

Flink 中每一个 worker(TaskManager)都是一个 JVM 进程,它可能会在独立的线 程上执行一个或多个 subtask。为了控制一个 worker 能接收多少个 task,worker 通 过 task slot 来进行控制(一个 worker 至少有一个 task slot)。 每个 task slot 表示 TaskManager 拥有资源的一个固定大小的子集。假如一个 TaskManager 有三个 slot,那么它会将其管理的内存分成三份给各个slot。
通过调整 task slot 的数量,允许用户定义 subtask 之间如何互相隔离。如果一个 TaskManager 一个 slot,那将意味着每个 task group 运行在独立的 JVM 中(该 JVM 可能是通过一个特定的容器启动的),而一个 TaskManager 多个 slot 意味着更多的 subtask 可以共享同一个 JVM。而在同一个 JVM 进程中的 task 将共享 TCP 连接(基 于多路复用)和心跳消息。它们也可能共享数据集和数据结构,因此这减少了每个 task 的负载。

Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力,可以通过 参数 taskmanager.numberOfTaskSlots 进行配置;而并行度 parallelism 是动态概念, 即 TaskManager 运行程序时实际使用的并发能力,可以通过参数 parallelism.default 进行配置。 也就是说,假设一共有 3个 TaskManager,每一个 TaskManager 中的分配 3个 TaskSlot,也就是每个 TaskManager 可以接收 3个 task,一共 9个 TaskSlot,如果我 们设置 parallelism.default=1,即运行程序默认的并行度为 1,9个 TaskSlot 只用了 1个,有 8个空闲,因此,设置合适的并行度才能提高效率

Flink/Blink 原理漫谈(零)运行时的组件相关推荐

  1. Flink/Blink 原理漫谈(六)容错机制(fault tolerance)详解

    系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...

  2. Flink/Blink 原理漫谈(二)流表对偶性和distinct详解

    系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...

  3. Flink/Blink 原理漫谈(一)时间,watermark详解

    系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...

  4. 从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件

    标题:从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/112 ...

  5. Java 内存管理、JVM 工作原理与 Java 运行时系统

    Java 虚拟机规范中说明:所有的对象实例(all class instances)以及数组都要在堆上分配: the heap is the runtime data area from which ...

  6. 编译原理教程_9 运行时存储组织

    文章原稿 https://gitee.com/fakerlove/fundamentals-of-compiling 文章目录 9. 运行时存储组织 9.1 概述 9.2 静态存储分配 9.3 动态存 ...

  7. Flink学习1——运行时架构(standalone模式)

    本篇主要讲述Flink Standalone模式下的运行时架构以及各个组件负责的功能,Flink的运行方式有很多,但都大同小异,本文基本可以满足对flink运行时架构的学习. 正文 Flink系统是主 ...

  8. 为什么vs2005内置Web application server中调用COM组件时正常,在IIS中运行时组件创建失败?...

    如题. 在vs2005内置服务器中运行正常,发布到IIS中运行时出现组件创建失败的错误.错误页面如 下: 不知道有没有遇到过这种情况的兄弟?麻烦指点一二.谢谢!

  9. 对Eclipse OMR(用于创建语言运行时环境的工具集)架构师Mark Stoodley的访谈

    IBM的Eclipse OMR是一个开源的虚拟机工具集,用于创建任意语言的运行时环境.它的意图在于让实现语言的人能够重用IBM在Java运行时方面所投入的数百开发人年所取得的成果,能够受益的包含已有的 ...

最新文章

  1. poj2724(二分图匹配)
  2. git简介及使用方法
  3. 力软 框架 转 mysql_快速web开发框架——learun framework
  4. arcgis select by attributes一次选多个_地理工具学习--arcgis篇:单工具学习(2)
  5. jenkins docker 自动部署 构建_jenkins+docker+vue项目的自动部署环境
  6. java面向对象封装之有参无返与有参有返
  7. html中把句子往右边弄一点咋办,CSS上的左,中,右对齐方法,可以在一行上混合...
  8. mysql支持事务的存储引擎_MySQL基础(三)【MySQL事务与存储引擎】
  9. JAVA Web基础6-EL表达式与JSTL标签库
  10. 查看电脑boot mode方式
  11. matlab2013和2014,64位机器MATLAB2013b和MATLAB2014a没有LCC编译器,怎么安装它呢?
  12. cookie的工作原理
  13. C语言中计算字符串长度的函数
  14. 定制ToolChain for ARM
  15. 设计师2022面试UI作品集PSD样机模板
  16. SAP_ABAP_BADI AND NEW BADI
  17. 推荐国外经典计算机教材9本
  18. android手机Down版本
  19. Office for Mac版本 提示更新已在进行中,请稍后再试,更新异常的解决方法
  20. 欧姆龙CJ系列PLC连接CHNet-CJ实现以太网通信配置方法

热门文章

  1. 车内降噪与智能降噪头枕的研究
  2. MySQL外键(详解)
  3. “无人驾驶汽车”挑战现行法律 这些问题必须厘清!
  4. 区块链溯源防伪认证在新零售电商中的价值体现在哪里?
  5. cad旋转命令_CAD平面图标高技巧
  6. 面试官:有了for循环 为什么还要forEach?
  7. for循环执行流程面试题(经典)
  8. for循环经典面试题
  9. Qt实现2048(4种模式)
  10. temporal简介