前一章我们对 Flink 进行了总体的介绍。对 Flink 是什么、能做什么、入门 demo、架构等进行了讲解。

本章我们将学习 Flink 重点概念、核心特性等。

本篇对 Flink 四大基石进行概括介绍,是 Flink 中非常关键的四个内容。

一、四大基石

Flink四大基石分别是:Time(时间)、Window(窗口)、State(状态)、Checkpoint(检查点)。

下面我们对每个部分,分别进行介绍。

(一)State

什么是状态?

流计算不断有数据流入,会基于历史数据和当前数据做计算,那么各个算子之中计算后的数据就是状态。

  • Flink 计算引擎,自身就是基于状态计算框架,默认情况下程序自己管理状态
  • 提供一致性的语义,使得用户在编程时能够更轻松、更容易地去管理状态
  • 提供一套非常简单明了的State API,包括ValueState、ListState、MapState,BroadcastState

(二)Checkpoint

什么是 Checkpoint(检查点)?

一言以蔽之:用于 Flink 的故障恢复。

Checkpoint 会定期生成快照(Snapshot),对当前 State 进行备份。若Flink程序崩溃,重新运行程序时可以有选择地从这些快照进行恢复。Checkpoint是Flink可靠性的基石

原理:

使用异步屏障快照 Asynchronous Barrier Snapshotting(简称 ABS)算法(依赖于Chandy-Lamport算法的变种)实现分布式快照。

与之相关的,容易混淆的是 savepoint。Savepoint 你可以把它当做在某个时间点程序状态全局镜像,以后程序在进行升级,或者修改并发度等情况,还能从保存的状态位继续启动恢复。

checkpoint savepoint
概念 自动容错机制 程序全局状态镜像
目的 程序自动容错,快速恢复。 程序修改后继续从状态恢复,程序升级等。
用户交互 Flink 系统行为。 用户触发。
状态文件保留策略 默认程序删除,可以设置 CheckpointConfig 中的参数进行保留。 会一直保存,除非用户删除。

(三)Window

流计算一种典型场景是计算一段时间内的统计值,如最近 5min、最近 1h 的点击量。

想完成这个操作,就需要划定一个时间段,也就是开窗,基于这个时间窗口上的数据做计算。

根据窗口数据划分的不同,目前 Flink 支持如下 3 种:

  • 滚动窗口,窗口数据有固定的大小,窗口中的数据不会叠加;
  • 滑动窗口,窗口数据有固定的大小,并且有生成间隔;
  • 会话窗口,窗口数据没有固定的大小,根据用户传入的参数进行划分,窗口数据无叠加。

(四)Time

要进行窗口计算,首先要明确基于的是什么时间。

Flink 中一共提供了三类时间:

  • 事件时间(Event Time),即事件实际发生的时间,这个时间一般由数据生产方自身携带;
  • 摄入时间(Ingestion Time),事件进入流处理框架的时间;
  • 处理时间(Processing Time),事件被处理的时间。

Flink还实现了 Watermark 的机制,能够支持基于事件时间的处理,能够容忍迟到/乱序的数据。这个我们后面篇章再展开讲。

二、小结

本篇对 Flink 四大基石进行了概括性的讲解,让大家对 State、Checkpoint、Window、Time 的概念有了初步的认知,后面的篇章将会对四个概念进行细致的讲解和梳理,并会深入到源码中探究其实现原理和使用方式。


参考文章:

Flink 高级特性(一)-Flink四大基石

Flink:四大基石[Time,Window,Checkpoint,State]_flink的四大基石-CSDN博客

FLINK 四大基石_flink四大基石-CSDN博客

【Flink入门修炼】2-1 Flink 四大基石的更多相关文章

  1. Flink入门-第一篇:Flink基础概念以及竞品对比

    Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...

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

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

  3. Flink入门(三)——环境与部署

    flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink在windows和linux中安装步骤,和示例程序的运行,包括本地调试环境,集群 ...

  4. Flink入门(四)——编程模型

    flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink的编程模型. 数据集类型: 无穷数据集:无穷的持续集成的数据集合 有界数据集:有 ...

  5. Flink入门(五)——DataSet Api编程指南

    Apache Flink Apache Flink 是一个兼顾高吞吐.低延迟.高性能的分布式处理框架.在实时计算崛起的今天,Flink正在飞速发展.由于性能的优势和兼顾批处理,流处理的特性,Flink ...

  6. flink 入门

    http://ifeve.com/flink-quick-start/ http://vinoyang.com/2016/05/02/flink-concepts/ http://wuchong.me ...

  7. 《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

    准备工作 1.安装查看 Java 的版本号,推荐使用 Java 8. 安装 Flink 2.在 Mac OS X 上安装 Flink 是非常方便的.推荐通过 homebrew 来安装. brew in ...

  8. Flink入门宝典(详细截图版)

    本文基于java构建Flink1.9版本入门程序,需要Maven 3.0.4 和 Java 8 以上版本.需要安装Netcat进行简单调试. 这里简述安装过程,并使用IDEA进行开发一个简单流处理程序 ...

  9. 记一次flink入门学习笔记

    团队有几个系统数据量偏大,且每天以几万条的数量累增.有一个系统每天需要定时读取数据库,并进行相关的业务逻辑计算,从而获取最新的用户信息,定时任务的整个耗时需要4小时左右.由于定时任务是夜晚执行,目前看 ...

  10. 不一样的Flink入门教程

    前言 微信搜[Java3y]关注这个朴实无华的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创 ...

随机推荐

  1. js中for in和for of详细讲解

    for in的详细讲解, for in遍历数组的毛病 1.index索引为字符串型数字,不能直接进行几何运算. 2.遍历顺序有可能不是按照实际数组的内部顺序 3.使用for in会遍历数组[所有的可枚 ...

  2. 获取Unity和UGUUI内置组件的属性名

    需求来源 在阅读UGUI的源码时,发现Unity对于私有字段才加了[[SerializeField]]标签,而public的没有,且在Editor扩展中,也是查找带序列化标签的私有字段进行修改,那么在 ...

  3. 手撕Vue-提取元素到内存

    接着上一篇文章,我们已经实现了构建Vue实例的过程,接下来我们要实现的是提取元素到内存. 主要是通过文档碎片来实现,文档碎片是一个轻量级的文档,可以包含和控制节点,但是不会像真实的DOM那样占用内存, ...

  4. django 处理请求

    本文基于 django runsever 入口 执行 python manage.py runserver 调用 django.core.management.commands.runserver.C ...

  5. 【奶奶看了都会】2分钟学会制作最近特火的ikun幻术图

    1.效果展示 最近ikun幻术图特别火啊,在网上能找到各种各样的ikun姿势图片,这些图片都是AI绘制的,能和风景完美融合在一起,今天小卷就来教大家怎么做这种图片 先看看图片效果 B站视频链接: 仿佛 ...

  6. .NET Core开发实战(第29课:定义仓储:使用EF Core实现仓储层)--学习笔记

    29 | 定义仓储:使用EF Core实现仓储层 首先定义仓储层的接口,以及仓储层实现的基类,抽象类 仓储层的接口 namespace GeekTime.Infrastructure.Core { / ...

  7. 如何在Windows端安装scala

    一.首先确保jdk安装成功   首先在安装之前,确保本地已经安装了JDK1.5以上的版本,在此安装的是1.8版本.并且已经设置了JAVA_HOME 环境变量及JDK的bin目录. 1.新建JAVA_H ...

  8. NC19885 [AHOI2009]CHESS 中国象棋

    题目链接 题目 题目描述 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧.一个炮要能攻击另一个炮他们必须要 ...

  9. Java操作EasyExcel实现导入导出入门

    介绍 EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单.节省内存著称.EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从 ...

  10. 代码+案例,实战解析BeautifulSoup4

    本文分享自华为云社区<从HTML到实战:深入解析BeautifulSoup4的爬虫奇妙世界>,作者:柠檬味拥抱. 网络上的信息浩如烟海,而爬虫技术正是帮助我们从中获取有用信息的重要工具.在 ...