flink入门基础知识整理(持续更新)

目录

1.入门概念

1.1 核心特点

1.1.1 批流数据

1.1.2 容错能力

1.1.3 高吞吐低延迟

1.1.4 大规模复杂计算

1.1.5 多平台部署

 2.API 介绍

2.1  API层次

2.2  DataStream体系

2.3  数据读取(Source)

2.3.1  内存读取

2.3.2  文件读取

2.3.3  SOCKET接入

2.3.4  自定义读取

2.4  数据转换处理(Transformation)

2.5  数据输出(Sink)

 3. 时间与窗口

3.1 时间概念

 3.2 窗口概念

3.2.1 计数窗口

3.2.2 时间窗口

3.2.3会话窗口


1.入门概念

1.1 核心特点

按照老中少三代来区分大数据框架,老一代为 处理流式数据的storm,中一带为 处理批式数据的hadoop、spark(微批为流),少一代为 本文章描述的 flink,自从阿里接管 flink 的开源后,今天的 flink已经已经十分强大,兼有 批流一体、高容错、高吞吐低延迟、大规模计算、多平台部署等核心特点

1.1.1 批流数据

        传统的大数据理解中,数据源源不断的产生,没有终止,同时也积累的许多。针对以上,源源不断的来的即为流式数据(无界数据),积累的一批为批式数据(有界数据)。批数据除了是已经产生的数据,还可以由流式数据作一定规则的细分截取产生。具体的的应用 应视情况而定,可以针对流式数据作聚合操作,也可以等攒齐了 一次性操作。Flink同时支持对流式数据操作和批示数据操作,且强于以上框架。

1.1.2 容错能力

        Flink容错能力主要有三种:依赖于集群管理、依赖于协调组件、依赖于自身快照机制

一:集群管理

        Flink支持多平台部署,其中k8s之类的容器集群管理平台本身自带当进程挂掉时,重启新进程接管工作的功能。

二:协调组件

        Flink可通过相应配置开启HA模式,依赖于Zookeeper的分布式协调服务。

三:快照机制

        Flink通过设计检查点和状态存储,来保证重启后可接着上次断点后继续工作。

1.1.3 高吞吐低延迟

        Flink除了在计算、传输、序列化做了优化外,得益于本身的快照机制,不依赖会产生阻塞的调度,从而可以持续处理数据

1.1.4 大规模复杂计算

        计算方面也得益于 flink本身的容错机制和状态存储设置,可以使 flink已聚合的方式逐批处理数据,并聚合保存之前和现有的状态 于本地内存中(数据是否共享有待研究,个人觉得是共享的 ),如此一来可以极大的降低大数据的调度】管理等

1.1.5 多平台部署

        和其他常见组件或应用一样,flink支持 容器化部署、云部署等

 2.API 介绍

2.1  API层次

  1. 最下层,为有状态流式编程,它提供了ProcessFunctionAPI。flink在这个底层api上帮我们实现了最基础的流式处理能力,我们可以在上门进行有状态编程,并且我们可以自定义定时器,可以实现复杂的时间语义处理。
  2. core api层,flink提供了DataStreamAPI和DataSetAPI(逐步被舍弃)。这两个API提供了数据处理的基本操作:各种数据转化,分组,开窗,状态编程等等。
  3. Table API是基于表的声明式dsl。它与DataStream区别主要在以下几个方面:遵循关系型数据模型,自带schema,提供了类sql操作,如select,project,join,group-by等等。
  4. flink提供的最高层api是flink-sql。它的抽象层次与Table API类似,但是允许用户直接写sql便可以执行job。

这四层关系很好理解,上层是下层的通用性封装,若不满足个性化需求场景,可自己根据下层api自定义开发,但最低为状态流的处理。

2.2  DataStream体系

  1. DataStream: 其为 Flink 数据流的 核心抽象,其上定义了对数据流的 一系列操作,同时也定义了与其他类型DataStream的相互转化关系。每个DataStream都有一个transformation对象,表示该DataStream 从上游的 DataStream 使用该 Transformation而来。
  2. SingleOutputStreamOperator:旁路输出,主要用来看过程信息
  3. KeyedStream:其用来表示根据指定的key(针对某个值)进行分组的数据流。
  4. SplitStream:其用来将流根据标记(针对,讴歌属性)划分成多个流,再通过select()获取指定(值)的流
  5. DataStreamSource:其为DataStream的起点,由环境对象的 StreamExcutionEnvironment.addSource(SourceFunction)创建而来,其中的 SourceFunction定义了从数据源获取数据的具体逻辑
  6. IterativeStream:迭代流,Flink的Datastream正常情况下是不会结束的,所以也没有所谓的最大迭代次数。这种情况下,你需要自己指定哪个类型的数据需要回流去继续迭代,哪个类型的数据继续向下传输,这个分流的方式有两种:split和filter。
  7. BroadcastConnectedStream && BroadcastStream: BroadcastStreams实际上是对一个普通的DataStream的封装,提供里广播行为;BroadcastConnectedStream则是BroadcastStreams与DataStream链接而来。
  8. QueryableStateStream:类似于一个接收器,无法进行进一步转换, 接收传入的数据(内部或者外部)并更新状态
  9. AllWindowedStream&&WindowedStream: WindowedStream代表了根据key分组且基于WindowAssigner切分窗口的数据流。所以Windowed都是KeyedStream衍生而来,在WindowedStream进行的任何转化也都将转会变为DataStream
  10. JoinedStreams&& CoGroupedStreams:join是COGroup的一种特例,JoinedStreams底层使用的COGroupStreams来实现。CoGroup侧重于Group, 对数据进行分组,是对同一个key上的两组集合进行操作,而join侧重的是数据对,对同一个key上的每一对元素进行操作。CoGroup更通用,单join比较常见。
  11. ConnectedStreams:其表示两个数据流的组合,数据流类型可以不一样。整合后的数据流共享 state。一种典型的场景就是两个流中一种是业务流,一种是规则流,业务流根据规则流来对数据进行处理。
  12. AsyncDataStream:是一个工具,提供在DataStream上使用异步函数的能力
  13. DataStreamSink:由 DataStream。addSink(SinkFunction)创建而来,其中SinkFunction定义了写出数据到外部存储的具体逻辑。

2.3  数据读取(Source)

这是flink流计算的起点, 第一个DataStream由此产生,主要有四种方式:内存读取、文件读取、socket读取、自定义

2.3.1  内存读取

主要是从 各种本地的数据结构中读取数据方法一般为 from开头,如 fromElements()、formCollection()、等

2.3.2  文件读取

主要是从本地文件读取, 除了自定义IO流之外,flink也封装了一系列的方法, 主要是以read 开头的方法 如readTextFlie()、readFile()等。读取模式分为一次性读取或持续读取两种吗,一般默认一次性读取。

2.3.3  SOCKET接入

主要从网络端口获取,一般方法以 socket开头。常用的 自测方法可以 以 在服务器开启 nc 服务指定端口,然后输入数据就可以创建一个简单的队列生产端 和 服务端, 本地监听端口,为消费端,源源不断的获取数据

2.3.4  自定义读取

可以使用flink连接器,自定义数据读取函数,与外部存储系统交互,包括但不限于 kafka、jdbc等,一般方法以 add 或者 create开头。

2.4  数据转换处理(Transformation)

由图中看出,并不是所有的 DataSTream都可以相互转换。里面转换算子网上有更详细的教程,后面的demo 会有所涉及,此处不做详解。

2.5  数据输出(Sink)

数据读取的API 是在 环境对象上,但是数据输出的API绑定在 DataStream。最新版本只支持输出到控制台、socket、自定义 三大类,文件相关的一致标记为废弃,但是可以使用或在自定义中实现。自定义输出的 接口为 DataStream.addSink().

除正常输出外,还有一些过程监控、特殊捕获的旁路输出,主要使用 SingleOutputStreamOperator,且只能在特定的函数中使用。

 

 

 3. 时间与窗口

 

3.1 时间概念

时间是 流式数据中 用来区分数据的一个维度,流式数据一般是无穷尽的,有的应用是来一条数据就处理一条数据, 有的则是通过时间雷积累一批或者通过数量来积累一批 再处理。一般 时间也是数据的一个属性,主要有以下三种类型:

  1. 事件时间:

指事件发生的时间,唯一确定时间,且可用来还原时间发生顺序

  1. 摄取时间:

指时间流入流处理系统时间,即数据被系统读取的时间,理论上应该与时间事件相近且顺序一致,但因为分布式等原因,可能会乱序

  1. 处理时间:

指数据被计算引擎处理的时间,以各个计算节点的本地时间为准,其会随着各个节点的传递而不断变化

 

3.2 窗口概念

在技术窗口和 时间窗口中都分为滚动窗口和滑动窗口,这里可以做一个比喻来形象的描述一下同类型窗口中相邻窗口之间的关系。

滚动窗口: 第一个窗口相当于放一个扑克牌于桌上,第二个窗口就是 让扑克牌沿着右边翻滚一下,或者说是向右平移一个扑克牌宽度的位置,第三个窗口则是进行相同的操作。

滑动窗口:滑动窗口有两个概念:窗口大小和滑动步长。跟上面类似,第一个窗口相当于一张扑克牌放于桌上,第二个窗口就是第一个窗口向右平移步长大小是位置(所以窗口会重叠),步长可以是计数窗口的数量或者时间窗口的时长。

3.2.1 计数窗口

3.2.1.1滚动计数窗口

        累计固定个数(窗口个数大小)的元素视为一个窗口,该类型的窗口无法像时间窗口那样事先切割分好,因为数据不是随着时间均匀的流入的

3.2.1.2滑动计数窗口

        累计固定个数(窗口个数大小)的元素视为一个窗口,每超过一定个数的原则个数(滑动步长,滑动个数大小),则产生一个新窗口

3.2.2 时间窗口

3.2.2.1滚动时间窗口

        表示在时间上按照事先约定的窗口大小(窗口时间大小)切分的窗口,窗口之间不会重合,窗口里面的 数据数量不一定一致,因为数据流入不是匀称的

3.2.2.2滑动时间窗口

        表示在时间上按照事先约定的窗口大小(窗口时间大小)、滑动步长(滑动时间大小)切分的窗口,滑动窗口之间可能会存在相互重叠的情况(根据窗口大小和步长而定)

3.2.3 会话窗口

其为一种 特殊的窗口,当超过一段时间,该窗口没有数据,则自动关闭,也可以是超过一段时间,该窗口有了数据,也可以自动关闭,一种动态变化产生的窗口。同一种规则定义下而定窗口也不会重叠。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Apache Flink 是一个分布式流处理框架,它可以处理实时数据流和批处理数据。如果你想学习 Apache Flink,可以从以下几个方面入手: 1. 学习 Flink 的基本概念和架构,包括数据流、数据源、数据转换、数据汇聚等。 2. 学习 Flink 的编程模型和 API,包括 DataSet API 和 DataStream API。 3. 学习 Flink 的部署和配置,包括集群部署和单机部署。 4. 学习 Flink 的应用场景和实践,包括实时数据处理、批处理、机器学习等。 如果你是零基础入门,可以先从 Flink 的官方文档入手,了解 Flink 的基本概念和架构,然后通过实践来深入学习 Flink 的编程模型和 API。同时,可以参考一些 Flink 的教程和案例,加深对 Flink 的理解和应用。 ### 回答2: Apache Flink是一个开源的流处理框架,能够对流数据进行实时处理和分析。它提供了多种处理功能,如数据流的转换、聚合、窗口计算等。在大数据时代,实时处理已经成为了一个不可或缺的需求,因此学习和掌握Flink框架具有非常重要的意义。 下面是Flink的零基础入门指南: 1. Flink的运行环境 Flink的运行环境可以分为本地模式和集群模式。在本地模式下,可以通过Flink命令自动启动一个Flink进程,进行代码测试与调试工作;在集群模式下,需要先构建一个Flink集群,然后在集群中启动Flink程序。 2. Flink的数据模型 Flink的数据模型包括了DataStream和DataSet两种。DataStream主要用于流计算,而DataSet主要用于批处理计算。在Flink中,数据是以并行的数据流或批次进行传输的。 3. Flink的操作符 Flink中的操作符包括了以下几种:Source(数据源),Transformation(转换操作)和Sink(数据输出)。Source用于获取数据源,Transformation用于数据处理,而Sink则是将计算结果输出到外部。 4. Flink的核心API Flink的核心API包括了DataStream API和DataSet API两种。DataStream API主要用于流数据处理,而DataSet API主要用于批处理数据。其中,DataStream API提供了多种类型的转换操作,如map、filter等;而DataSet API则提供了多种聚合和关联操作,如group、join等。 5. Flink的窗口函数 在流处理中,为了处理非无限的数据流,通常需要将数据按照一定的规则分成有限大小的窗口。而Flink的窗口函数就是用于实现这个功能的。Flink提供了多种窗口函数,如滚动窗口、滑动窗口、会话窗口等。 总之,掌握Flink框架具有重要的意义,尤其是对于需要进行实时大数据处理的行业。通过对Flink的API和窗口函数的了解,可以更好地了解其中的分布式计算和容错机制,从而更好地运用Flink进行大数据实时计算。 ### 回答3: 作为一种分布式流式计算框架,Apache Flink 不仅可以处理批处理任务,在处理实时数据的时候也十分出色。而且,Apache Flink 在容错性、可伸缩性和高效性方面都表现得相当优秀,并且它具有易于使用的 Java API 和 SQL 接口。 如果您是想要学习 Apache Flink 的零基础用户,以下是一些可以帮助您入门的建议。 1.去官网了解 Flink 的基本知识 在开始学习 Apache Flink 之前,建议去官网先了解一下 Flink 基本的架构和使用方法,以及相关的概念和体系架构。这样可以帮助您更快地开始构建您自己的 Flink 应用程序。 2.学习 Flink API Flink 提供了三种类型的 API:DataStream API、DataSet API 和 Table/SQL API。其中,DataStream API 和 DataSet API 是 Flink 的核心 API,可以通过编写 Java 或 Scala 代码来使用。而 Table/SQL API 则是最近推出的一种新型 API,可以更方便地处理 SQL 查询。 3.使用文档和示例 Apache Flink 官网提供了丰富的文档和示例代码,以帮助用户更好地理解和应用 Flink。通过按照教程操作,并对示例代码进行修改和调试,可以帮助您更快地了解如何使用 Flink 并使其工作。 4.尝试使用 Flink 社区现成的解决方案 Apache Flink 的社区已经开发了许多解决方案和应用场景,比如 FlinkML、FlinkCEP、FlinkGraph 等等,可以用来解决不同的业务需求和数据处理问题。尝试使用这些现成的解决方案,并在实践中不断优化和修改,可以巩固您对 Flink 的理解和使用。 总之,学习 Apache Flink 需要一定的时间和耐心,但掌握 Flink 的核心概念和 API 可以帮助您更轻松地构建快速、可靠的数据流处理系统。尝试多练习并与 Flink 社区互动,在实践中不断探索 Flink 系统的优化和升级,相信您一定能在 Flink 技术上迅速成长。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值