首页 > 其他分享 >flink教程:flink的有界、无界数据流、流批一体、容错能力等概念

flink教程:flink的有界、无界数据流、流批一体、容错能力等概念

时间:2023-09-03 13:04:59浏览次数:32  
标签:Flink 处理 flink 容错 数据流 操作符 流批 数据


能否详细解释一下其中的 数据流、流批一体、容错能力等概念?

flink教程:flink的有界、无界数据流、流批一体、容错能力等概念_flink

概述

数据流:所有产生的 数据 都天然带有 时间概念,把 事件 按照时间顺序排列起来,就形成了一个事件流,也被称作数据流。

流批一体:

首先必须先明白什么是 有界数据无界数据

flink教程:flink的有界、无界数据流、流批一体、容错能力等概念_数据集_02

有界数据,就是在一个确定的时间范围内的数据流,有开始,有结束,一旦确定就不会再改变,一般 处理 用来处理有界数据,如上图的 bounded stream。

无界数据,就是持续产生的数据流,数据是无限的,有开始,无结束,一般 流处理 用来处理无界数据。如图 unbounded stream。

Flink的设计思想是以 为核心,批是流的特例,擅长处理 无界 和 有界 数据, Flink 提供 精确的时间控制能力 和 有状态 计算机制,可以轻松应对无界数据流,同时 提供 窗口 处理有界数据流。所以被成为流批一体。

容错能力:

在分布式系统中,硬件故障、进程异常、应用异常、网络故障等异常无处不在,Flink引擎必须保证故障发生后 不仅可以 重启 应用程序,还要 确保 其内部状态保持一致,从最后一次正确的时间点重新出发

Flink提供 集群级容错应用级容错 能力

集群级容错: Flink 与 集群管理器紧密连接,如YARN、Kubernetes,当进程挂掉后,自动重启新进程接管之前的工作。同时具备 高可用性 ,可消除所有单点故障,

**应用级容错:**Flink 使用 轻量级分布式快照,设计检查点(checkpoint)实现可靠容错。

Flink 利用检查点特性,在框架层面 提供 Exactly-once 语义,即端到端的一致性,确保数据仅处理一次,不会重复也不会丢失,即使出现故障,也能保证数据只写一次。

详解

有界数据

Flink不仅可以处理无界数据流(unbounded data stream),还可以处理有界数据集(bounded data set)。有界数据集是指在处理之前已知大小的数据集,也称为批处理数据。

对于有界数据集,Flink提供了批处理模式,可以对整个数据集进行一次性的计算和处理。在批处理模式下,Flink将数据划分为有限的数据块,并在计算过程中对这些数据块进行并行处理。

使用Flink处理有界数据集时,可以利用Flink的分布式计算能力和优化技术,以高效且可扩展的方式执行各种计算任务。Flink提供了丰富的API和操作符,使得对有界数据集的转换、过滤、聚合和计算等操作变得简单易用。

以下是一个简单的示例,展示了如何使用Flink处理有界数据集:

ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

DataSet<String> input = env.readTextFile("input.txt");

DataSet<Tuple2<String, Integer>> result = input
    .flatMap((String line, Collector<String> out) -> {
        // 在这里执行数据的处理逻辑,可以进行转换、过滤等操作
        // 并将结果写入到Collector中
    })
    .groupBy(0)
    .sum(1);

result.print();

在上述示例中,首先通过readTextFile方法读取一个文本文件,将其作为有界数据集。然后使用flatMap操作符对每行数据进行处理,可以在该操作符中进行各种转换、过滤和计算操作。最后,使用groupBysum操作符对结果进行分组和求和,并通过print方法将结果打印出来。

通过这种方式,你可以使用Flink对有界数据集进行批处理任务,执行各种数据处理和计算操作,包括数据清洗、转换、聚合、排序等。

无界数据

Flink是一种强大的流处理框架,特别擅长处理无界数据流(unbounded data stream)。无界数据流是指数据源持续产生数据,并且在处理过程中没有固定的终点,数据流可以无限延续下去。

Flink提供了流处理模式,可以实时处理和分析无界数据流。它能够处理来自各种数据源(如消息队列、日志文件、传感器等)的实时数据,并在数据到达时立即进行计算和处理。

通过Flink的流处理模式,可以对无界数据流应用各种转换、过滤、聚合和计算操作。Flink提供了丰富的流处理API和操作符,使得对无界数据流的处理变得高效、灵活且易于编程。

以下是一个简单的示例,展示了如何使用Flink处理无界数据流:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

DataStream<String> input = env.addSource(new YourDataSource());

DataStream<Tuple2<String, Integer>> result = input
    .flatMap((String line, Collector<String> out) -> {
        // 在这里执行数据的处理逻辑,可以进行转换、过滤等操作
        // 并将结果写入到Collector中
    })
    .keyBy(0)
    .sum(1);

result.print();

env.execute("Streaming Job");

在上述示例中,首先通过addSource方法添加自定义的数据源,该数据源可以从外部系统中获取无界数据流。然后使用flatMap操作符对每条数据进行处理,可以在该操作符中执行各种转换和计算操作。接下来,使用keyBy操作符将数据按照键进行分组,再使用sum操作符对分组后的数据进行求和。最后,通过print方法将结果打印出来。

通过这种方式,你可以使用Flink对无界数据流进行实时处理和分析,执行各种实时计算任务,包括数据转换、过滤、聚合、窗口操作等。Flink的流处理模式能够处理高吞吐量和低延迟的实时数据,并具备容错性和状态管理等特性,适用于各种实时数据处理场景。


标签:Flink,处理,flink,容错,数据流,操作符,流批,数据
From: https://blog.51cto.com/zhangxueliang/7339496

相关文章

  • flink教程:Flink 和 Spark Streaming的区别?
    Flink和SparkStreaming的区别?Flink和SparkSreaming最大的区别在于:Flink是标准的实时处理引擎,基于事件驱动,以流为核心,而SparkStreaming的RDD实际是一组小批次的RDD集合,是微批(Micro-Batch)的模型,以批为核心。概述下面我们介绍两个框架的主要区别:1.架构模型SparkStreamin......
  • flink基础:什么是Flink?
    什么是Flink?描述一下Flink是一个以流为核心的高可用、高性能的分布式计算引擎。具备流批一体,高吞吐、低延迟,容错能力,大规模复杂计算等特点,在数据流上提供数据分发、通信等功能。ApacheFlink是一个开源的流式处理和批处理框架,旨在处理高吞吐量和低延迟的大规模数据流。它提供了......
  • Flink 1.17教程:任务槽Task Slots和并行度的关系
    任务槽TaskSlots在ApacheFlink中,任务槽(TaskSlots)是指可用于执行并行任务的资源单元。每个任务槽可以看作是一个可用的执行线程或处理单元,用于并行执行作业的不同部分。通俗来说,可以将任务槽想象成一个工作台,而每个工作台上都可以同时进行一项任务。任务槽的数量决定了同时可以......
  • Flink 1.17教程:Standalone会话模式运行时架构及并行度
    运行时架构——Standalone会话模式为例并行度并行度是指在计算过程中同时执行多个任务或操作的能力。在ApacheFlink中,并行度是指同时执行作业中的多个任务或算子的能力。并行度的引入是为了解决以下问题:提高计算速度:通过将任务拆分成多个子任务,并行执行它们,可以大大提高计算速度......
  • Flink 1.17教程:历史服务器History Server
    K8S运行模式容器化部署是如今业界流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是Kubernetes(k8s),而Flink也在最近的版本中支持了k8s部署模式。基本原理与YARN是类似的,具体配置可以参见官网说明,这里我们就不做过多讲解了......
  • Flink 1.17教程:并行度设置&优先级
    并行度设置&优先级并行度(Parallelism)并行度的设置在Flink中,可以用不同的方法来设置并行度,它们的有效范围和优先级别也是不同的。代码中设置我们在代码中,可以很简单地在算子后跟着调用setParallelism()方法,来设置当前算子的并行度:stream.map(word->Tuple2.of(word,1L)).setParall......
  • Flink 1.17教程:算子链Operator Chain
    算子链OperatorChain在ApacheFlink中,算子链(OperatorChaining)是将多个操作符(算子)连接在一起形成一个链式结构的优化技术。算子链的作用是将多个操作符合并为一个单一的任务单元,以减少通信开销、提高执行效率和减少资源占用。通俗来说,算子链的作用可以比喻为将多个操作合并成一......
  • Flink 1.17教程:Hadoop yarn会话运行模式
    YARN运行模式_环境准备YARN上部署的过程是:客户端把Flink应用提交给Yarn的ResourceManager,Yarn的ResourceManager会向Yarn的NodeManager申请容器。在这些容器上,Flink会部署JobManager和TaskManager的实例,从而启动集群。Flink会根据运行在JobManger上的作业所需要的Slot数量动态分配T......
  • Flink 1.17教程:部署模式介绍及Standalone运行模式
    部署模式介绍在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。Flink为各种场景提供了不同的部署模式,主要有以下三种:会话模式(SessionMode)、单作业模式(Per-JobMode)、应用模式(ApplicationMode)。它们的区别主要在于:集群的生命周期以及资源的分配方式;以及应用的mai......
  • Flink 1.17教程:Hadoop yarn运行模式——单作业模式和应用模式
    YARN运行模式_单作业模式单作业模式部署(1)执行命令提交作业YARN运行模式_应用模式应用模式同样非常简单,与单作业模式类似,直接执行flinkrun-application命令即可。如:bin/flinkrun-application-tyarn-application-ccom.atguigu.wc.WordCountStreamUnboundedDemo./FlinkTutorial......