• Flink系列之Flink流式计算引擎基础理论



    声明:
            文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。


    By luoyepiaoxue2014

    B站:https://space.bilibili.com/1523287361 点击打开链接
    微博地址: https://weibo.com/luoyepiaoxue2014 点击打开链接



    title: Flink系列


    一、Flink流式计算引擎基础理论

    1.1 官网解读

    官网解释: https://flink.apache.org/

    Apache Flink® — Stateful Computations over Data Streams

    在这里插入图片描述

    看详细介绍:

    优势细节官网链接
    所有流式场景1、数据驱动的应用
    2、批流数据分析
    3、数据通道和ETL
    https://flink.apache.org/zh/usecases.html
    正确性保证1、Exactly-once状态一致性保证
    2、事件时间处理
    3、复杂的late date处理
    https://flink.apache.org/zh/flink-applications.html#building-blocks-for-streaming-applications
    分层 APISQL on Stream & Batch Data
    DataStream API & DataSet API
    ProcessFunction (Time & State)
    https://flink.apache.org/zh/flink-applications.html#layered-apis
    聚焦运维灵活部署
    高可用
    保存点
    https://flink.apache.org/zh/flink-operations.html
    大规模计算水平扩展架构
    支持超大状态
    增量检查点机制
    https://flink.apache.org/zh/flink-architecture.html#run-applications-at-any-scale
    性能卓越低延迟
    高吞吐
    内存计算
    https://flink.apache.org/zh/flink-architecture.html#leverage-in-memory-performance

    英文版本:

    在这里插入图片描述

    中文版本:

    在这里插入图片描述

    Flink 各种特性介绍:https://flink.apache.org/
    What is Apache Flink?:https://flink.apache.org/flink-architecture.html
    Flink 应用场景:https://flink.apache.org/usecases.html
    Flink 应用企业:https://flink.apache.org/poweredby.html
    Flink 版本升级迭代:https://flink.apache.org/downloads.html
    Flink Quick Start:https://nightlies.apache.org/flink/flink-docs-release-1.14//docs/try-flink/local_installation/
    Flink 架构:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/concepts/flink-architecture/
    Flink 核心概念:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/concepts/glossary/
    Flink 流式应用程序开发相关:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/datastream/overview/
    Flink Checkpoint:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/ops/state/checkpoints/
    Flink State 和 StateBackend:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/ops/state/state_backends/
    Flink 部署:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/overview/

    要点01:Flink 处理无界数据流:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/learn-flink/overview/#stream-processing
    要点02:Flink 关于并行数据流的处理方案:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/learn-flink/overview/#parallel-dataflows
    要点03:Flink 的有状态计算和状态管理:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/learn-flink/overview/#stateful-stream-processing
    要点04:Flink Operator 和 Task:https://nightlies.apache.org/flink/flink-docs-release-1.14/fig/levels_of_abstraction.svg
    要点05:Flink 资源管理 和 Solot:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/concepts/flink-architecture/#task-slots-and-resources
    要点06:Flink 应用程序运行模式:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/concepts/flink-architecture/#flink-application-execution

    Flink 设计目的和初衷:

    无界数据流:无界数据流有一个开始但是没有结束,它们不会在生成时终止并提供数据,必须连续处理无界流,也就是说必须在获取后立即处理event。对于无界数据流我们无法等待所有数据都到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)获取event,以便能够推断结果完整性,无界流的处理称为流处理。

    无界流有一个开始,但没有定义的结束。它们不会在生成数据时终止并提供数据。必须连续处理无边界流,即,事件在被摄入后必须立即处理。等待所有输入数据到达是不可能的,因为输入是无界的,并且不会在任何时间点完成。处理无界数据通常需要以特定的顺序接收事件,例如事件发生的顺序,以便能够推断出结果的完整性。

    一种不断增长的,本质上无限的数据集。这些通常被称为“流数据”。然而,当应用于数据集时,术语流或批量是有问题的,这种数据往往意味着使用某种类型的执行引擎来处理这些数据集。两种类型的数据集之间的关键区别在于现实中它们的有限性,因此最好用表示这种区别的术语来表述它们。因此,我将无限的“流”数据集称为无限数据,有限的“批处理”数据集作为有限数据。

    有界数据流和无界数据流的区别:

    在这里插入图片描述

    一种持续的数据处理模式,适用于无限数据流。低延迟,近似和/或推测结果通常与流式引擎联系在一起。事实上,批处理系统传统上没有实现低延迟或推测性的结果。

    从这里开始,任何时候使用术语“流”,意思都是设计用于无限数据集的执行引擎。当没有附加任何其他术语时,将明确表示无限数据,无限数据处理或低延迟/近似/推测结果。这些是在Google Dataflow中采用的术语。

    最终总结:

    离线和实时应该指的是:数据处理的延迟;
    批量和流式指的是:数据处理的方式。
    
    • 1
    • 2

    批处理的特点是有界、持久、大量,批处理非常适合需要访问全套记录才能完成的计算工作,一般用于离线统计。

    流处理的特点是无界、实时,流处理方式无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计。

    1.2 Flink 架构设计实现和应用模块分工

    Flink 整体架构设计实现:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/concepts/flink-architecture/

    架构图

    在这里插入图片描述

    RestClient(ActorSystem RPC 通信 HTTP 的提交 App) +

    StreamGraph(一个算子/一个Operator 就是这个 DataFlow 中的一个顶点 流图 原始图) +

    JobGraph (提交到服务集群中的数据结构抽象对象,在 StreamGraph 基础之上做了优化:把满足一定条件的相邻 Operator 合并成一个 OperatorChain)

    JobManager( ResourceManager 管理和调度资源 + WebMonitorEndpoint 接收 客户端 rest 请求 + Dispatcher 做任务分发 )

    • JobGraph(当 Dispatcher 去给这个Job 启动一个 JobMaster 的时候,会让 JobMaster(类似于 YARN 中的 AM 角色) 把这个 JobGraph 转换成 ExecutionGraph
    • ExecutionGraph: 并行化(Operator 根据并行度运行成多个 Task)) + ExecutionGraph

    TaskManager: Memory、NetWork 、IO Manager ActorSystem, TaskSlotTable

    关于 ResourceManager 的解释:

    1、YARN 中的 主节点

    2、Flink 的 JobManager / Standalone 集群的主节点 的一个内部组件: 资源管理

    主节点:逻辑概念: JobManager
    Standalone: 主节点:物理概念: StandaloneSessionClusterEntrypoint
    YARN Session Cluster: 主节点: YARNSessionClusterEntrypoint
    
    • 1
    • 2
    • 3

    Flink API 设计:https://nightlies.apache.org/flink/flink-docs-release-1.14/fig/levels_of_abstraction.svg

    在这里插入图片描述

    Flink 整体架构体系:API 和 Libaries 体系

    在这里插入图片描述

    阿里的 Flink 流式平台负责人: 阿里云栖大会的时候,在 Flink-1.13 的完全支持 流批一体的 API

    批处理:Spark
    流处理:Flink
    
    • 1
    • 2

    很多公司,自己实现!搞一个平台,封装这两个东西

    Spark =》 SparkSession :SparkContext + SQLContext + HiveContext

  • 相关阅读:
    Hikyuu 1.3.0 发布,高性能量化交易研究框架
    C# 如何将表格数据转成实体
    Spring全局异常处理
    IDEA类和方法注释模板配置
    c++菱形继承
    Innodb的七种锁
    工作中积累的对K8s的就绪和存活探针的一些认识
    PyTorch实现Logistic回归对多元高斯分布进行分类实战(附源码)
    Elasticsearch生命周期ILM若干时间后自动删除索引index
    论文阅读:基于隐马尔可夫模型的蛋白质多序列比对方法研究
  • 原文地址:https://blog.csdn.net/luoyepiaoxue2014/article/details/128077558