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
相关推荐
AI推荐率6 小时前
想让AI在选购问题中推荐品牌,应该找什么类型的服务商?
大数据·人工智能·microsoft
浅思科技集6 小时前
工业生产运营软件如何选择?看端到端可见性、数据贯通与AI落地
大数据·人工智能
浅念-7 小时前
一文吃透Git:本地操作|冲突处理|远程协作|GitFlow工作流详解
大数据·git·elasticsearch·搜索引擎·gitflow
葫三生7 小时前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
国科安芯7 小时前
星链供电架构中的高集成度电源管理方案研究——基于ASP4644四通道降压稳压器在低轨卫星星座中的应用分析
大数据·单片机·嵌入式硬件·架构·低轨卫星·星间链路
小王毕业啦8 小时前
2011-2024年 各地级市养老服务信息面板数据 xlsx
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
ailsa_hui8 小时前
对于医疗器械行业,鼎捷的ERP有成熟的行业解决方案和合规性支持吗?
大数据
资讯综合9 小时前
500亿招聘市场悖论:AI技术能否填平行业的信任深坑
大数据·人工智能
百胜软件@百胜软件10 小时前
胜券AI的Skills可插拔技能包,让零售AI从“泛”到“专”
大数据·人工智能·零售
汇智信科10 小时前
基于 Jmis 框架的制度与流程管控系统设计与应用|项目全生命周期管理
大数据·人工智能·微服务·云原生·汇智信科