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
相关推荐
向阳12181 小时前
Kafka快速入门
java·大数据·分布式·kafka·mq
程序员小潘2 小时前
初识Flink
大数据·flink
happy_king_zi2 小时前
Flink On kubernetes
大数据·flink·kubernetes
程序员小潘3 小时前
Elasticsearch字段数据类型
大数据·elasticsearch
程序员小潘3 小时前
Elasticsearch文档操作
大数据·elasticsearch
一勺菠萝丶3 小时前
如何解决Elasticsearch容器因“Connection refused”导致的问题
大数据·elasticsearch·jenkins
武子康3 小时前
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
大数据·elasticsearch·搜索引擎·flink·spark·全文检索·kylin
CtrlCV 攻城狮3 小时前
Elasticsearch是做什么的?
大数据·elasticsearch·搜索引擎
武子康3 小时前
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据·elk·elasticsearch·搜索引擎·flink·spark·全文检索