云社区 博客 博客详情

Flink入门学习笔记

潇湘暮雨 发表于 2020-08-11 15:10:45 2020-08-11
0
1

【摘要】 Flink入门学习笔记

本文为初入Flink的学习笔记,是在学习过程中对Flink基础知识的整理,具体学习内容包括尚硅谷Flink大数据从入门到精通Flink官方文档以及[白话解析] Flink的Watermark机制等多个博客。

    • Flink是什么

              Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速的计算

      • 数据流

                    数据流是指数据像水流一样是连续不断的

        • 有界数据流

                        有界数据流定义了流的开始,也定义了流的结束;

                        有界数据流可以在摄取了所有数据后再进行计算

                        有界数据流所有数据可以被排序,所以不需要有序摄取

                        有界流处理通常被称为批处理

        • 无界数据流

                  无界数据流定义了流的开始,但没有定义流的结束

                  无界数据流会无休止地产生数据

                  无界数据流得到数据必须持续处理,即数据被摄取后需要立即处理,不能等到所有数据都到达再处理,因为无界数据流的输入是无限的,在任何时候都不会结束

                  处理无界数据流通常需要以特定的顺序摄取时间,例如事件的发生顺序,以便能过够推断结果的完整性

      • 有状态的计算

             有状态计算是指在程序计算过程中,在Flink内部会存储计算所产生的中间结果,并提供给后续计算使用

    • 为什么需要使用Flink

            因为在日常生活中的数据主要是流数据,例如用于交通运输业和环境等方面进行实时数据采集的传感器、银行中所进行的实时结算和实时异常检测行为。这些应用都需要对大量的实时数据进行及时的处理,希望具有低延时、高吞吐性。传统对于该数据的处理一般是批处理,即将一批数据收集完成后再进行处理,这样将会导致不能实时处理数据,会造成较高的延时,影响实际的使用。而Flink则是进行流处理,即每到来一个数据就进行处理,无需积攒一  批进行处理,因此它具有较高的实时性和高吞吐性,能够更好的满足日常的需求。

    • Flink组成

            Flink主要是由JobManager、TaskManager、ResourceManager和Dispatcher组成

      • JobManager

              JobManager是控制一个应用程序执行的主进程,也就是说每个应用程序都会被一个不同的JobManager所控制执行

      • TaskManager

              TaskManager是Flink中的工作进程。在Flink中会有多个TaskManager运行,每个TaskManager都会有一定数量的插槽(Slot)

      • ResourceManager

             ResourceManager主要负责管理TaskManager的插槽slot

      • Dispatcher

              Dispatcher可以跨作业运行,为应用提供了REST接口,而且也提供了WebUI,用来方便展示和监控作业的执行信息

    • Flink的任务提交流程

      1. 当一个任务被提交时,Dispatcher就会启动,并将应用交给一个JobManager进行处理

      2. JobManager接收到任务后,会向ResourceManager申请执行任务所需要的插槽(slot)资源

      3. 当ResourceManager接收到JobManager申请插槽资源后,会启动TaskManager

      4. TaskManager会向ResourceManager注册自己空闲的slot,ResourceManager会根据JobManager所请求的slot数量,向TaskManager发送提供slot的指令

      5. TaskManager与JobManager直接进行通信,向JobManager提供slot

      6. JobManager向TaskManager分配要在slot中执行的任务

      TaskManager和slot的关系

              Flink中每一个TaskManager都是一个JVM进程,它可能会在独立的线程上执行一个或多个子任务。为了控制一个TaskManager能接收多个任 务,TaskManager通过slot来进行控制。Slot时TaskManager的最小资源分配单位,一个TaskManager中有多少个slot就意味着能支持多少的并发处理

    • 时间语义

            Event Time:事件创建的时间,即事件在现实世界中发生的时间,通常由事件中的时间戳描述

            Ingestion Time:数据进入Flink的时间,即Flink读取数据源的时间

            Processing Time:执行操作算子的本地系统时间,与机器相关,即数据流入到某个具体算子(消息被计算处理)时候相应的系统时间,也就是Flink处理该事件时当前系统时间

            

    • window类型   

            window用来将无界流切分成有界流,对于window在Flink中主要有以下两种,即时间窗口和计数窗口

      • 时间窗口

              时间窗口顾名思义就是以时间来划分窗口,时间窗口又分为以下三种,即滚动时间窗口、滑动时间窗口和会话时间窗口

        • 滚动时间窗口

            滚动窗口将依据固定的窗口长度对数据进行切分,窗口长度固定,没有重叠。而且只有当前一个窗口结束,下面一个窗口才会开始,每个数据只会被划分到一个窗口中。例如:如果指定大小为5分钟的滚动窗口,则将执行当前窗口,并且每5分钟将启动一个新窗口

                

        • 滑动时间窗口

            滑动窗口是由固定的窗口长度和滑动间隔组成,窗口每次只会滑动固定的距离。窗口之间会有重叠,一个数据可能会存在于多个窗口中。例如:可以使用窗口大小为10分钟的窗口,滑动大小为5分钟,这样,每5分钟会生成一个窗口,包含最后10分钟到达的事件


                

        • 会话窗口

              会话窗口的窗口大小不固定,其窗口大小和数据相关,只要在一段时间内没有接收到新的数据,就会生成新的窗口

                


      • 计数窗口

              计数窗口与时间窗口类似,其与时间窗口的不同在于以数据的个数进行划分,而不是以时间划分,其主要分为滚动窗口和滑动窗口

登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:huaweicloud.bbs@huawei.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 1
点赞
分享文章到微博
分享文章到朋友圈

下一篇:Flink SQL中connector的定义和实现

评论 (0)


该篇博文已经被设置为禁止评论!