Flink DataStream API-概念、模式、作业流程和程序

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 前几篇介绍了Flink的入门、架构原理、安装等,相信你对Flink已经了解入门。接下来开始介绍Flink DataStream API内容,先介绍DataStream API基本概念和使用,然后介绍核心概念,最后再介绍经典案例和代码实现。本篇内容:Flink DataStream API的概念、模式、作业流程和程序。

前几篇介绍了Flink的入门、架构原理、安装等,相信你对Flink已经了解入门。接下来开始介绍Flink DataStream API内容,先介绍DataStream API基本概念和使用,然后介绍核心概念,最后再介绍经典案例和代码实现。本篇内容:Flink DataStream API的概念、模式、作业流程和程序。

1、基本概念

用于处理数据流的API称之为DataStream API,而DataStream类用于表示Flink程序中的数据集合。你可以将它视为包含重复项的不可变数据集合。这些数据可以是有限的,也可以是无限的,用于处理这些数据的API是相同的。

DataStream数据集都是分布式数据集,分布式数据集是指:一个数据集存储在不同的服务器节点上,每个节点存储数据集的一部分,例如下图:

在编程时,可以把DataStream看作一个数据操作的基本单位,而不必关心数据的分布式特性,Flink会自动将其中的数据分发到集群的各个节点。

2、执行模式

Flink的执行模式分为3种:

  1. STREAMING:典型的DataStream执行模式(默认)
  2. BATCH:在DataStream API上以批处理方式执行
  3. AUTOMATIC:让系统根据数据源的有界性来决定

3、作业流程和程序结构

3.1、Flink作业流程

前面我们介绍过Flink JobManager是Flink集群的主节点,它包含3个不同的组件:Flink Resource Manager、Dispatcher、运行每个Flink Job的JobMaster。JobManager和TaskManager被启动后,TaskManager会将自己注册给JobManager中的ResourceManager(资源注册)。

Flink作业流程如下:

  1. 用户编写应用程序代码,并通过Flink客户端提交作业。,调用Flink API构建逻辑数据流图,然后转为作业图JobGraph,并附加到StreamExecutionEnvironment中。代码和相关配置文件被编译打包,被提交到JobManager的Dispatcher,形成一个应用作业。
  2. Dispatcher(JobManager的一个组件)接收到这个作业,启动JobManager,JobManager负责本次作业的各项协调工作。
  3. 接下来JobManager向ResourceManager申请本次作业所需的资源。
  4. JobManager将用户作业中的作业图JobGraph转化为并行化的物理执行图,对作业并行处理并将其子任务分发部署到多个TaskManager上执行。每个作业的并行子任务将在Task Slot中执行。至此Flink作业就开始执行了
  5. TaskManager在执行计算任务的过程中可能会与其他TaskManager交换数据,会使用相应的数据交换策略。同时,TaskManager也会将一些任务状态信息反馈给JobManager,这些信息包括任务启动、运行或终止的状态、快照的元数据等。

Flink作业流程图见下图:

3.2、Flink程序结构

前面我们介绍过,Flink的程序是有固定模板的,具体如下:

  1. 获取执行环境
  2. 加载/创建初始数据
  3. 对初始数据进行转换
  4. 指定计算结果的输出位置
  5. 触发程序执行

所有Flink程序都是延迟(惰性)执行的:执行程序的main()方法时,不会直接进行数据加载和转换,而是将每个操作添加到数据流图,当在执行环境中调用execute()显式触发执行时才会执行这些操作。程序是在本地执行还是在群集上执行取决于执行环境的类型。惰性计算允许构建复杂的程序,Flink将其作为一个整体规划的单元执行。

Flink的程序模板见下面的示例。示例采用流计算,读取socket数据源,对输入的数据进行统计,最后输出到控制台。执行main方法前,现在本地开启netcat,nc -lk 9999,然后输入任意字符,即可看到统计结果。

public static void main(String[] args) throws Exception {
    // 1. 创建执行环境
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    // 2. 读取数据源
    DataStream<String> textStream = env.socketTextStream("localhost", 9999, "\n");
    // 3. 数据转换
    DataStream<Tuple2<String, Integer>> wordCountStream = textStream
            // 对数据源的单词进行拆分,每个单词记为1,然后通过out.collect将数据发射到下游算子
            .flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
                         @Override
                         public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
                             for (String word : value.split("\\s")) {
                                 out.collect(new Tuple2<>(word, 1));
                             }
                         }
                     }
            )
            // 对单词进行分组
            .keyBy(value -> value.f0)
            // 对某个组里的单词的数量进行滚动相加统计
            .reduce((a, b) -> new Tuple2<>(a.f0, a.f1 + b.f1));
    // 4. 数据输出。字节输出到控制台
    wordCountStream.print("WordCountStream=======").setParallelism(1);
    // 5. 启动任务
    env.execute(WordCountStream.class.getSimpleName());
}

原文链接: http://www.mangod.top/articles/2023/07/31/1690758123965.htmlhttps://mp.weixin.qq.com/s/XICBfneJWFe4quwf3kRQXQ

感谢你的阅读,码字不易,欢迎点赞、关注、收藏!!!

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
11天前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用合集之是否可以支持只读模式的数据库
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11天前
|
消息中间件 资源调度 Java
实时计算 Flink版产品使用合集之部署yarn模式,怎么实现峰谷动态并行度扩容缩容
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
10天前
|
SQL 分布式计算 测试技术
Flink API的4个层次
【5月更文挑战第24天】Flink的API分为四个层次:核心底层API、核心开发API(DataStream/DataSet API)、声明式DSL API和结构化API。
|
11天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之测试使用initial模式,使用savepoint停掉再加上表,不会做全量同步,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之在Application模式下,如何在客户端中同步获取任务执行结果后再退出
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11天前
|
消息中间件 资源调度 Oracle
实时计算 Flink版产品使用合集之使用yarn-session的模式来提交任务,空间的资源是否释放给yarn
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11天前
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之遇到错误org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'jdbc',该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
11天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之采集选择增量(latest)读取模式,是否可以使用动态加载表功能
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7天前
|
监控 数据挖掘 API
京东商品API接口:电商数据自动化的钥匙
京东商品API接口为电商领域带来了巨大的便利和潜力。通过本篇文章,读者应该能够了解如何使用京东商品API接口,并通过示例代码学习如何实际调用API获取商品数据。 随着技术的不断发展,京东商品API接口将继续为电商自动化、数据分析和市场研究提供支持,帮助商家和开发者在竞争激烈的市场中保持领先。我们鼓励读者继续探索和学习,充分利用京东商品API接口带来的机遇。
|
17天前
|
监控 安全 数据挖掘
Email 接口API有哪些?具体分析一下阿里云和AOK的优点
本文介绍了常见的Email接口API,如阿里云邮件推送、AOKSend、SendGrid、Mailgun和Amazon SES。阿里云API以其高稳定性和数据分析功能脱颖而出,支持批量发送和多语言;而AOKSend API以易于集成、高安全性和优秀客户支持为亮点。企业在选择时应考虑自身需求和预算,以优化邮件营销效果。