Flink入门

概念透析

实践练习章节介绍了作为 Flink API 根基的有状态实时流处理的基本概念,并且举例说明了如何在 Flink 应用中使用这些机制。其中 Data Pieplelin & ETL 小节介绍了有状态流处理的概念,并且在 Fault Tolerance 小节中进行了深入介绍。Streaming Analytics 小节介绍了实时流处理的概念。

本章将深入分析 Flink 分布式运行时架构如何实现这些概念。


Flink 为流式/批式处理应用程序的开发提供了不同级别的抽象

  • Flink API 最底层的抽象为有状态实时流处理 。其抽象实现是 Process Function,并且 Process Function 被 Flink 框架集成到了 DataStream API 中来为我们使用。它允许用户在应用程序中自由地处理来自单流或多流的事件(数据),并提供具有全局一致性和容错保障的状态。此外,用户可以在此层抽象中注册事件时间(event time)和处理时间(processing time)回调方法,从而允许程序可以实现复杂计算。

  • Flink API 第二层抽象是 Core APIs 。实际上,许多应用程序不需要使用到上述最底层抽象的 API,而是可以使用 Core APIs 进行编程:其中包含 DataStream API(应用于有界/无界数据流场景)。Core APIs 提供的流式 API(Fluent API)为数据处理提供了通用的模块组件,例如各种形式的用户自定义转换(transformations)、联接(joins)、聚合(aggregations)、窗口(windows)和状态(state)操作等。此层 API 中处理的数据类型在每种编程语言中都有其对应的类。

    Process Function 这类底层抽象和 DataStream API 的相互集成使得用户可以选择使用更底层的抽象 API 来实现自己的需求。DataSet API 还额外提供了一些原语,比如循环/迭代(loop/iteration)操作。

  • Flink API 第三层抽象是 Table APITable API 是以表(Table)为中心的声明式编程(DSL)API,例如在流式数据场景下,它可以表示一张正在动态改变的表。Table API 遵循(扩展)关系模型:即表拥有 schema(类似于关系型数据库中的 schema),并且 Table API 也提供了类似于关系模型中的操作,比如 select、project、join、group-by 和 aggregate 等。Table API 程序是以声明的方式定义应执行的逻辑操作 ,而不是确切地指定程序应该执行的代码。尽管 Table API 使用起来很简洁并且可以由各种类型的用户自定义函数扩展功能,但还是比 Core API 的表达能力差。此外,Table API 程序在执行之前还会使用优化器中的优化规则对用户编写的表达式进行优化。

    表和 DataStream /DataSet 可以进行无缝切换,Flink 允许用户在编写应用程序时将 Table APIDataStream /DataSet API 混合使用。

  • Flink API 最顶层抽象是 SQL 。这层抽象在语义和程序表达式上都类似于 Table API ,但是其程序实现都是 SQL 查询表达式。SQL 抽象与 Table API 抽象之间的关联是非常紧密的,并且 SQL 查询语句可以在 Table API 中定义的表上执行。

本地模式安装

请按照以下几个步骤下载最新的稳定版本开始使用。

步骤 1:下载

为了运行Flink,只需提前安装好 Java 11。你可以通过以下命令来检查 Java 是否已经安装正确。

复制代码
java -version

下载 release 1.20.0 并解压。

bash 复制代码
$ tar -xzf flink-1.20.0-bin-scala_2.12.tgz
$ cd flink-1.20.0-bin-scala_2.12

步骤 2:启动集群

Flink 附带了一个 bash 脚本,可以用于启动本地集群

bash 复制代码
$ ./bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host.
Starting taskexecutor daemon on host.

步骤 3:提交作业(Job)

Flink 附带了一个 bash 脚本,可以用于启动本地集群。

bash 复制代码
$ ./bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host.
Starting taskexecutor daemon on host.

步骤 3:提交作业(Job)

Flink 的 Releases 附带了许多的示例作业。你可以任意选择一个,快速部署到已运行的集群上。

bash 复制代码
$ ./bin/flink run examples/streaming/WordCount.jar
$ tail log/flink-*-taskexecutor-*.out
  (nymph,1)
  (in,3)
  (thy,1)
  (orisons,1)
  (be,4)
  (all,2)
  (my,1)
  (sins,1)
  (remember,1)
  (d,4)

另外,你可以通过 Flink 的 Web UI 来监视集群的状态和正在运行的作业。

步骤 4:停止集群

完成后,你可以快速停止集群和所有正在运行的组件。

bash 复制代码
$ ./bin/stop-cluster.sh
相关推荐
乐迪信息7 分钟前
乐迪信息:AI防爆摄像机的船舶船体烟火智能预警系统
大数据·网络·人工智能·算法·无人机
辰风沐阳11 分钟前
git 忽略大小写(重命名文件)
大数据·git·elasticsearch
云端服务中心18 分钟前
数字化采购招投标服务落地指南——政府采购代理机构实操解析
大数据·人工智能
产品经理邹继强34 分钟前
VTC产品与创新篇②:产品决策仪表盘——告别优先级争吵,用三维算法驱动路线图
大数据·人工智能
金融小师妹34 分钟前
宏观预期再定价模型触发风险因子重构:黄金价格由反弹阶段转入高波动震荡区间
大数据·重构
珠海西格电力37 分钟前
零碳园区能源互联的核心协同模式解析
大数据·人工智能·物联网·架构·产品运营·能源
迎仔38 分钟前
03-Apache Tez 通俗指南:MapReduce 的“高速公路”升级包
大数据·apache·mapreduce
艺杯羹41 分钟前
Git文件状态管理:从基础到进阶的完整指南
大数据·git·elasticsearch·版本控制·git教程·代码管理·git基础
Prince-Peng1 小时前
技术架构系列 - 详解Elasticsearch
大数据·elasticsearch·架构
海南java第二人1 小时前
Flink动态字符串处理框架:构建灵活可配置的实时数据管道
java·flink