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

简介: 前几篇介绍了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+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
7月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
8月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
JSON 安全 API
288 0
JSON 监控 API
344 0
|
8月前
|
人工智能 API 开发者
图文教程:阿里云百炼API-KEY获取方法,亲测全流程
本文详细介绍了如何获取阿里云百炼API-KEY,包含完整流程与截图指引。需先开通百炼平台及大模型服务,再通过控制台创建并复制API-KEY。目前平台提供千万tokens免费额度,适合开发者快速上手使用。
6325 5
|
9月前
|
JSON 缓存 供应链
API 接口驱动 1688 采购自动化:从商品获取到下单支付的全流程贯通
在B2B电商采购中,1688开放平台通过API实现商品筛选、比价、下单、支付及物流跟踪的全流程自动化,大幅提升采购效率,降低人工成本与错误率。企业可无缝对接ERP系统,实现数据驱动决策,显著优化采购周期、成本与风险管控,助力数字化转型。
|
9月前
|
JSON 自然语言处理 供应链
API接口赋能1688采购全流程:从商品获取到下单支付一键贯通
1688采购API助力企业实现全流程自动化,涵盖商品数据获取、智能比价、一键下单、支付及物流跟踪等环节,显著提升采购效率,降低成本与风险,推动B2B采购模式智能化升级。
|
9月前
|
缓存 Java API
Spring WebFlux 2025 实操指南详解高性能非阻塞 API 开发全流程核心技巧
本指南基于Spring WebFlux 2025最新技术栈,详解如何构建高性能非阻塞API。涵盖环境搭建、响应式数据访问、注解与函数式两种API开发模式、响应式客户端使用、测试方法及性能优化技巧,助你掌握Spring WebFlux全流程开发核心实践。
1504 0
|
10月前
|
存储 JSON 关系型数据库
【干货满满】解密 API 数据解析:从 JSON 到数据库存储的完整流程
本文详解电商API开发中JSON数据解析与数据库存储的全流程,涵盖数据提取、清洗、转换及优化策略,结合Python实战代码与主流数据库方案,助开发者构建高效、可靠的数据处理管道。
|
10月前
|
存储 监控 API
零基础 3 天搞定京东 / 淘宝 API 开发,从注册到调通接口全流程拆解
本文详解京东/淘宝API开发入门,涵盖账号注册、应用创建、签名生成及实战项目,助零基础开发者3天掌握电商API调用,实现商品数据获取与价格监控。