一、Flink编程数据流模型

1.1、Flink – API封装

Flink 提供不同级别的API封装来支持流/批处理应用程序。


1.2、Flink-编程数据流

  • Source:一个不会结束的数据记录流。
  • Transformations:使用一个或多个数据流作为输入,生成一个或多个数据流结果。
  • Sink:输出数据流。

1.3、Flink-并行数据流

  • One-to-One stream
  • Redistributing

1.4、Flink-Windows

聚合操作(如counts,sums)在streams上的操作和batch processing上面有很大不同。例如,统计流中所有记录的个数是不可能的,因为一般流是不会结束的。所以在流上执行聚合操作,例如count,那么是会被指定为windows范围,例如最近5分钟的count或sum最近的100条记录。

Windows可以时间驱动(每30秒)或数据驱动(每100个记录)


1.5、Flink-Time

  • Event Time
    数据生成的时间。
  • Ingestion time
    数据进入Flink的时间。
  • Processing Time
    使用time-based 操作时的时间。

二、Flink核心概念

2.1、任务和算子链

分布式计算中,Flink 将算子(operator)的 subtask 链接(chain)成 task。

每个 task 由一个线程执行。把算子链接成 tasks 能够减少线程间切换和缓冲的开销,在降低延迟的同时提高了整体吞吐量。

2.2、JobManager,TaskManager,Clients

JobManagers (也称为 masters)协调分布式计算。它们负责调度任务、协调 checkpoints、协调故障恢复等。每个 Job 至少会有一个 JobManager。高可用部署下会有多个 JobManagers,其中一个作为 leader,其余处于 standby 状态。

TaskManagers(也称为 workers)执行 dataflow 中的 tasks(准确来说是 subtasks ),并且缓存和交换数据 streams。每个 Job 至少会有一个 TaskManager。

客户端虽然不是运行时(runtime)和作业执行时的一部分,但它是被用作准备和提交 dataflow 到 JobManager 的。提交完成之后,客户端可以断开连接,也可以保持连接来接收进度报告。

2.3、Task Slots和资源

每个worker(TaskManager)都是一个JVM进程,并且可以在不同的线程中执行一个或多个 subtasks。为了控制 worker 接收 task 的数量,worker 拥有所谓的task slots(至少一个)。

每个task slots代表TaskManager的一份固定资源子集。例如,具有三个slots的 TaskManager 会将其管理的内存资源分成三等份给每个slot。划分资源意味着subtask之间不会竞争资源,但是也意味着它们只拥有固定的资源。(资源并不包含CPU资源,当前slots之间只是划分任务的内存资源。)

通过调整slot的数量,用户可以决定subtasks的隔离方式。每个TaskManager有一个slot意味着每组task在一个单独的JVM中运行(例如,在一个单独的容器中启动)。拥有多个slots意味着多个subtasks共享同一个JVM。Tasks在同一个 JVM 中共享 TCP 连接(通过多路复用技术)和心跳信息(heartbeat messages)。它们还可能共享数据集和数据结构,从而降低每个 task 的开销。

默认情况下,Flink允许subtasks共享 slots,即使它们是不同tasks的subtasks,只要它们来自同一个job。因此,一个slot可能会负责这个 job 的整个管道(pipeline)。

允许 slot sharing 有两个好处:

  1. Flink 集群需要与job中使用的最高并行度一样多的 slots。这样不需要计算作业总共包含多少个tasks(具有不同并行度)。

  2. 更好的资源利用率。在没有slot sharing的情况下,简单的 subtasks(source/map())将会占用和复杂的subtasks(window)一样多的资源。通过slot sharing,将示例中的并行度从2增加到6可以充分利用slot的资源,同时确保繁重的 subtask 在 TaskManagers 之间公平地获取资源。

学习笔记Flink(二)—— Flink数据流模型、时间窗口和核心概念相关推荐

  1. Linux学习笔记(二) -- Linux学习笔记(二) – 解决VMware主窗口中的虚拟机窗口太小的方法

    1.问题描述 在虚拟机中安装完ubuntu操作系统后,我们会发现ubuntu界面在主窗口中占比很小,如下图所示: 这给操作带来了极大的不便. 2.解决步骤 1.在VMware中启动ubuntu系统: ...

  2. CSS3与页面布局学习笔记(二)——盒子模型(Box Model)、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  3. Windows 8 Directx 开发学习笔记(二)建立模型及初始化设备

    上一篇中介绍的DirectxApp类给整个应用搭建了一个框架,而这篇文章涉及的CubeRenderer类则是负责填充框架,呈现实际内容:一个旋转的彩色立方体.CubeRenderer类中的方法通过名称 ...

  4. 数学建模学习笔记(二):非线性规划模型例题与灵敏度分析

    文章目录 前言 一.一个简单的非线性规划模型 二.问题的求解 1.模型的建立与求解 2.得出结论 三.灵敏度分析 总结 参考书目 前言 数学建模解决问题的过程一般分为五个步骤,称为五步方法,五个步骤如 ...

  5. MXNET学习笔记(二):模型的保存与加载

    当序列化 NDArray 的时候,我们序列化的是NDArray 中保存的 tensor 值.当序列化 Symbol 的时候,我们序列化的是 Graph. Symbol序列化 当序列化 Symbol 的 ...

  6. SW2017学习笔记(二)SW模型创建的一般过程

    SW模型创建的一般过程 SW模型创建的一般过程 分析 创建工作目录 新建一个零件三维模型文件 创建零件中的各个特征 创建第一个特征(基础特征) 选择命令 创建截面草图 定义草图平面 定义截面草图 完成 ...

  7. 建模学习笔记(二)Topsis模型算法步骤

    三点解释 比较的对象一般要远大于两个.(例如比较一个班级的成绩) 比较的指标也往往不只是一个方面的,例如成绩.工时数.课外竞赛得分等. 有很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指 ...

  8. EasyX学习笔记(二、黑客帝国数据流)

    EasyX学习笔记(二.黑客帝国数据流) 思路说明 main函数 startup函数 show函数 updatewithoutinput函数 结构 代码 思路说明 main函数 1.main函数中应包 ...

  9. Windows内存管理学习笔记(二)—— 物理内存的管理

    Windows内存管理学习笔记(二)-- 物理内存的管理 物理内存 实验一:理解MmNumberOfPhysicalPages MmPfnDatabase _MMPFN 物理页状态 六个链表 实验二: ...

最新文章

  1. PE文件和COFF文件格式分析——导出表的应用——一种插件模型
  2. C#字符ASCII码学习经验
  3. Http Tunnel 小记
  4. 【正则化】DropBlock详解
  5. (caffe入门)windows caffe 之 mnist 训练
  6. c语言用二维数组学生姓名,C语言实验报告合集-_人人文库网
  7. EXT2/EXT3文件系统
  8. libnet库的安装与使用
  9. 你的面子到底值几斤几两
  10. 北美科技公司“隐藏福利”大盘点:看完我彻底酸了...
  11. 回溯算法--LeetCode-78 子集、LeetCode-90 子集Ⅱ
  12. 书籍推荐:搜索引擎技术入门书籍
  13. C# Excel 数据导入mysql数据库
  14. dvwa brute force(暴力破解)
  15. multisim 常见报错
  16. org.springframework.context.annotation.ConflictingBeanDefinitionException异常处理
  17. 硅谷银行一夜破产!ChatGPT 之父撒钱救援,马斯克有意收购?
  18. 用动态规划算法解决TSP问题
  19. 最适合新版微信的聊天背景,一键应用所有聊天场景
  20. UOJ#31. 【UR #2】猪猪侠再战括号序列 splay

热门文章

  1. outlook邮箱邮件大小限制_配置邮箱的邮件大小限制: Exchange 2013 帮助 | Microsoft Docs...
  2. NTU课程笔记 MAS714(2) Big-O notations
  3. Leetcode每日必刷题库第80题,如何在不使用外部空间的情况下对有序数组去重?
  4. Python入门100题 | 第073题
  5. C语言-将数字转化为字符串
  6. 【机器学习PAI实践一】搭建心脏病预测案例
  7. tomcat架构分析(valve机制)【转】
  8. 携程基于云的软呼叫中心及客服平台架构实践
  9. CORS with Spring MVC--转
  10. Java 线程池框架核心代码分析--转