Flink简介及小案例

ops/2024/10/18 21:19:37/

Apache Flink 是一个用于分布式数据流处理的框架,常用于实时大数据处理和批处理。Flink 的操作可以分为两个方面:安装配置编写任务代码。下面对这两块做一下简单的介绍。

1. 安装和配置 Flink

(1) 下载并安装 Flink

从 Apache Flink 的官网上下载对应的二进制包 Flink 下载页面。

# 使用wget下载
wget https://downloads.apache.org/flink/flink-1.14.4/flink-1.14.4-bin-scala_2.12.tgz# 解压
tar -xzf flink-1.14.4-bin-scala_2.12.tgz
cd flink-1.14.4
(2) 配置 Flink
  • 配置文件路径:conf/flink-conf.yaml
  • 可修改的参数:
    • jobmanager.rpc.address: 设置为 JobManager 的主机名或 IP 地址。
    • taskmanager.numberOfTaskSlots: 每个 TaskManager 可以配置的 slot 数量。
(3) 启动 Flink 集群

Flink 可以本地运行,也可以运行在分布式集群上。下面展示在本地启动 Flink 的命令:

# 启动 Flink 集群
./bin/start-cluster.sh

启动后可以通过浏览器访问 localhost:8081 来查看 Flink Web UI,查看作业状态和集群信息。

2. 编写 Flink 任务代码

Flink 任务主要分为两类:DataStream API(用于流处理)和 DataSet API(用于批处理)。这里我们主要介绍流处理。

(1) 设置开发环境

通常我们使用 Java 或 Scala 编写 Flink 应用。在 Maven 项目中,可以通过添加以下依赖来集成 Flink:

<dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java_2.12</artifactId><version>1.14.4</version>
</dependency>
(2) 示例代码

一个简单的流处理任务的 Java 代码如下:

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;public class FlinkExample {public static void main(String[] args) throws Exception {// 创建执行环境final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 生成数据源DataStream<String> text = env.fromElements("hello", "world", "flink", "streaming");// 进行简单的转换操作,如 mapDataStream<String> upperCaseStream = text.map(String::toUpperCase);// 打印结果到控制台upperCaseStream.print();// 启动程序env.execute("Flink Streaming Example");}
}
(3) 提交任务

当任务编写完成后,可以通过以下命令将任务提交到 Flink 集群:

# 提交任务到 Flink 集群
./bin/flink run -c <MainClass> <JAR文件路径>

例如:

./bin/flink run -c com.example.FlinkExample /path/to/flink-example.jar

3. 常用操作

Flink 提供了很多常用操作用于流数据处理:

  • map(): 对流中的每个元素应用一个函数。
  • filter(): 过滤掉不符合条件的元素。
  • keyBy(): 基于某个字段对流进行分组。
  • window(): 对流数据进行窗口化处理(如基于时间窗口或数量窗口)。
  • reduce(): 聚合操作,对窗口中的数据进行累积处理。

这些操作组合起来可以实现复杂的实时数据处理逻辑。

总结

Flink 的操作主要包括集群的搭建与配置,以及通过 API 编写数据处理任务。安装和启动相对简单,而任务的实现可以根据需求组合不同的算子来实现复杂的处理逻辑。如果你有具体的任务需求或想了解某些细节,我可以为你提供更详细的帮助。


http://www.ppmy.cn/ops/126563.html

相关文章

zabbix 6.4主机名不支持中文的问题优化

zabbix 6.4主机名默认不支持中文&#xff0c;可以通过修改文件实现支持中文 vi /usr/share/zabbix/include/defines.inc.php 找到 define(ZBX_PREG_INTERNAL_NAMES, ([0-9a-zA-Z_\. \-])); // !!! Dont forget sync code with C !!! 修改为 define(ZBX_PREG_INTERNAL_NAMES, …

OpenHarmony 入门——ArkUI 自定义组件内同步的装饰器@State小结(二)

文章大纲 引言一、组件内状态装饰器State1、初始化2、使用规则3、变量的传递/访问规则说明4、支持的观察变化的场景5、State 变量的值初始化和更新机制6、State支持联合类型实例 引言 前一篇文章OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结&#xff08;一&…

基于Java的超级玛丽游戏的设计与实现(论文+源码)-kaic

摘 要 “超级玛丽”游戏是是任天堂情报开发本部开发的Family Computer横版卷轴动作游戏&#xff0c;它因操作简单、娱乐性强而广受欢迎。Java 的优势在于网络编程与多线程&#xff0c;但其作为一门全场景语言&#xff0c;依然提供了强大的GUI开发API。本论文利用Java的GUI界…

maven dependency中scope的取值类型

在 Maven 中&#xff0c;<scope> 标签用于定义依赖项的范围&#xff0c;以指定依赖在不同阶段的可见性和生命周期。以下是 Maven 中常见的 <scope> 取值类型的详细介绍&#xff1a; 1. **compile**&#xff1a; - 默认的依赖范围&#xff0c;适用于编译、测试和…

Android中的IntentService及其作用。

在Android开发中&#xff0c;处理后台任务是一个常见的需求。为了保证应用的流畅性和响应性&#xff0c;许多耗时操作需要在后台线程中执行。然而&#xff0c;直接管理后台线程可能会变得复杂且容易出错。为了简化这一过程&#xff0c;Android提供了IntentService&#xff0c;一…

一文搞懂springboot上传+下载文件的总体逻辑

Springboot文件上传下载问题 需要hutool的工具 hutool可以生成数据md5等一些工具 非常好用 依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.7</version></dependency><…

基于Spring Cloud的电商系统设计与实现——用户与商品模块的研究(上)

操作系统&#xff1a;Windows Java开发包&#xff1a;JDK1.8 项目管理工具&#xff1a;Maven3.6.0 项目开发工具&#xff1a;IntelliJIDEA 数据库&#xff1a;MySQL Spring Cloud版本&#xff1a;Finchley.SR2 Spring Boot版本&#xff1a;2.0.6.RELEASE 目录 用户模块—user-…

机器学习可解释性

机器学习的稳健性、可解释性和结果正确性等是人工智能安全可信应用必须解决的关键问题。 传统机器学习&#xff1a; 内置可解释性&#xff1a;决策树IF-Then规则&#xff0c;直观可理解事后可解释性&#xff1a;训练结束后的可解释技术特定于模型体系结构的解释与解释方法及模…