美文网首页
Flink学习笔记(一)

Flink学习笔记(一)

作者: DataArk | 来源:发表于2020-04-22 23:48 被阅读0次

    主要内容来自zhisheng大佬的课程,作为学习记录

    一、实时计算的相关背景

    实时计算应用

    实时计算场景

    离线计算 vs 实时计算

    • 离线计算
    1. 数据量大且时间周期长(一天、一星期、一个月、半年、一年)
    2. 在大量数据上进行复杂的批量运算
    3. 数据在计算之前已经固定,不再会发生变化
    4. 能够方便的查询批量计算的结果
    • 实时计算
    1. 数据实时到达
    2. 数据到达次序独立,不受应用系统所控制
    3. 数据规模大且无法预知容量
    4. 原始数据一经处理,除非特意保存,否则不能被再次取出处理,或者再次提取数据代价昂贵

    实时计算中的流处理 vs 批处理

    二、Flink基本概念

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

    1. 数据集类型

    任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流(无界或者有界流)。

    • 无界数据流
      无界数据流就是指有始无终的数据,数据一旦开始生成就会持续不断的产生新的数据,即数据没有时间边界。无界数据流需要持续不断地处理。处理无界数据流通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。

    • 有界数据流
      有界数据流就是指输入的数据有始有终,有界数据流可以在摄取所有数据后再进行计算。有界数据流所有数据可以被排序,所以并不需要有序摄取。处理这种有界数据流的方式也被称之为批处理。

    Flink中定义了两个特殊类DataSet和DataStream来表示上述两种数据,DataSet数据是有界数据流,而DataStream是无界数据流。

    2. Flink数据处理方式

    Apache Flink是一个面向数据流处理和批量数据处理的可分布式的开源计算框架,它基于同一个Flink流式执行模型(streaming execution model)。Flink进行流处理时认为输入数据流是无界的,批处理则被作为一种特殊的流处理,输入数据流被定义为有界。

    3. Flink作业提交架构流程

    flink整体架构图

    Flink的架构总体来说分为以下几个部分:

    • Job Client

    • Job Manager

    • Task Manager

    1. Job Client:Job Client 不是 Flink 程序执行的内部部分,但它是任务执行的起点。Job Client 负责接受用户的程序代码,然后创建数据流,将数据流提交给 Job Manager 以便进一步执行。执行完成后,Job Client 将结果返回给用户

    2. Job Manager:主进程(也称为作业管理器)协调和管理程序的执行。它的主要职责包括安排任务、管理 checkpoint 、故障恢复等。机器集群中至少要有一个 master,master 负责调度 task、协调 checkpoints 和容灾,高可用设置的话可以有多个 master,但要保证一个是 leader,其他是 standby。Job Manager 包含 Actor system、Scheduler、Check pointing 三个重要的组件。

    3. Task Manager:从 Job Manager 处接收需要部署的 Task。Task Manager 是在 JVM 中的一个或多个线程中执行任务的工作节点。任务执行的并行性由每个 Task Manager 上可用的任务槽(Slot 个数)决定。每个任务代表分配给任务槽的一组资源。例如,如果 Task Manager 有四个插槽,那么它将为每个插槽分配 25% 的内存。可以在任务槽中运行一个或多个线程。同一插槽中的线程共享相同的 JVM。

    4. Flink API

    • ProcessFunctions
      Process Function允许用户可以自由地处理来自一个或多个流数据的事件,并使用一致性、容错的状态。除此之外,用户可以注册事件时间和处理事件回调,从而使程序可以实现复杂的计算。

    • DataStream/DataSet API
      DataStream API为很多常用的流式计算操作提供了基元,比如窗口、记录的转换,并且通过查询外部存储来丰富event。DataSet 处理有界的数据集,DataStream 处理有界或者无界的数据流。用户可以通过各种方法将数据进行转换或者计算。

    • Table API
      Table API 是以表为中心的声明式 DSL,其中表可能会动态变化(在表达流数据时)。Table API 提供了例如 select、project、join、group-by、aggregate 等操作,使用起来却更加简洁(代码量更少)。 你可以在表与 DataStream/DataSet 之间无缝切换,也允许程序将 Table API 与 DataStream 以及 DataSet 混合使用

    • SQL API
      SQL API在语法与表达能力上与 Table API 类似,但是是以 SQL查询表达式的形式表现程序。SQL 抽象与 Table API 交互密切,同时 SQL 查询可以直接在 Table API 定义的表上执行。

    5. Flink 代码逻辑

    • Source
      数据输入,Flink 在流处理和批处理上的 source 大概有 4 类:

      1. 基于本地集合的 source

      2. 基于文件的 source

      3. 基于网络套接字的 source

      4. 自定义的 source( 常见的有 Apache kafka、Amazon Kinesis Streams、RabbitMQ、Twitter Streaming API、Apache NiFi 等)

    • Transformation
      数据转换的各种操作,有 Map/FlatMap/Filter/KeyBy/Reduce/Fold/ Aggregations/Window/WindowAll/Union/Window join/Split/Select/Project 等,操作很多,可以将数据转换计算成你想要的数据。

    • Sink
      数据输出,Flink 将转换计算后的数据发送的地点,Flink 常见的 Sink 大概有如下几类:写入文件、打印出来、写入 socket、自定义的 sink 。自定义的 Sink 常见的有 Apache kafka、RabbitMQ、MySQL、ElasticSearch、Apache Cassandra、Hadoop FileSystem 等。

    6. Flink 部署

    Flink 是支持以 Standalone、YARN、Kubernetes、Mesos、AWS、MapR、Aliyun OSS 等形式部署的。

    相关文章

      网友评论

          本文标题:Flink学习笔记(一)

          本文链接:https://www.haomeiwen.com/subject/ykiuzctx.html