当前位置: 首页 > backend >正文

Flink-01学习 介绍Flink及上手小项目之词频统计

flink简介

官网
概述
学习Flink具体包括四个关键概念:流数据的持续处理,事件时间,有状态流处理和状态快照。
Apache Flink 是一个开源的流处理框架,旨在处理批处理和实时数据处理,具有高吞吐量和低延迟的特点。
Apache Flink 是一个用于对无界和有界数据流进行有状态计算的框架和分布式处理引擎。Flink 被设计为可在所有常见的集群环境中运行,并以内存速度和任意规模执行计算。
特点

  • 流处理:Flink 将批处理视为流处理的一种特殊情况。这种方法允许实时数据处理,实现即时的洞察和行动。
  • 有状态计算:Flink 提供强大的状态管理,使得在处理流的过程中可以保持状态。这一特性对于需要容错和一致性的应用至关重要。
  • 事件时间处理:Flink 允许用户基于事件时间来处理数据,即使数据无序到达,也能提供准确及时的结果。
  • 容错性:Flink 的状态管理和检查点机制确保系统在出现故障时能够恢复而不丢失状态,维护数据完整性和应用一致性。
  • 高吞吐量和低延迟:Flink 的架构优化了高吞吐量和低延迟,适合高性能应用。
  • 可扩展性:Flink 可以扩展到数千个节点,能够处理大规模数据处理任务。
  • 灵活的部署选项:Flink 可以部署在各种环境中,包括独立集群、云环境和容器编排平台(如 Kubernetes)。
    应用
    Flink 集群始终由一个 JobManager和一个或多个 Flink TaskManager组成。JobManager 负责处理作业提交、作业监管以及资源管理。Flink TaskManager 是工作进程,负责执行构成 Flink 作业的实际 任务。在本实践中,您将从单个 TaskManager 开始,但稍后可以扩展到更多 TaskManager。

实践

创建一个meven项目
引入pom

  <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>flink-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-java --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-java</artifactId><version>1.20.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>1.20.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-clients --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-clients</artifactId><version>1.20.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-table-api-java-bridge --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-api-java-bridge</artifactId><version>1.20.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-table-api-java --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-api-java</artifactId><version>1.20.0</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-base</artifactId><version>1.20.0</version></dependency><dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-api</artifactId><version>2.0</version></dependency><dependency><groupId>org.apache.maven.plugin-tools</groupId><artifactId>maven-plugin-annotations</artifactId><version>3.2</version></dependency><dependency><groupId>org.codehaus.plexus</groupId><artifactId>plexus-utils</artifactId><version>3.0.8</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-plugin-plugin</artifactId><version>3.2</version><executions><execution><phase>package</phase><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins>
</build>
</project>

Flink 中的 DataStream 程序是常规程序,用于对数据流进行转换(例如,过滤、更新状态、定义窗口、聚合)。数据流最初由各种来源(例如,消息队列、套接字流、文件)创建。结果通过接收器返回,接收器可以将数据写入文件或标准输出(例如命令行终端)。Flink 程序可以在各种上下文中运行,独立运行或嵌入到其他程序中。执行可以在本地 JVM 中,也可以在多台机器组成的集群中执行。

代码如下:

package org.example.snow.demo1;import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.core.fs.FileSystem;
import org.apache.flink.datastream.api.ExecutionEnvironment;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;/*** @author snowsong*/
public class StartRunApp {public static void main(String[] args) throws Exception {// 数据来源String inPath = "dataMsg/dataSourceFile.txt";// 数据输出String outputPath = "dataMsg/result.csv";// 初始化StreamExecutionEnvironment executionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment();// 读取文件信息DataStreamSource<String> textFile = executionEnvironment.readTextFile(inPath);SingleOutputStreamOperator<Tuple2<String, Integer>> flatMap = textFile.flatMap(new Splitter()).keyBy(value -> value.f0).sum(1);textFile.print();// 写入数据到 CSV 文件,使用 writeAsText 或 writeAsCsvflatMap.writeAsCsv(outputPath,FileSystem.WriteMode.OVERWRITE," ","\n")// 这是设置并行度的参数,表示执行该操作的任务的数量。在这里,setParallelism(1) 表示该操作会在 单个任务 中执行,而不是并行执行多个任务。通常情况下,Flink 在处理流或批数据时可以通过并行执行来加速处理,而设置并行度为 1 可以强制数据写入在一个线程中进行。.setParallelism(1);// 调用 execute() 后,Flink 会开始处理数据流中的每个操作,并根据定义的逻辑执行数据转换、聚合等操作。// 作业名称:"file.txt -> result.csv" 是为了描述输入文件和输出文件的关系,可以帮助你理解这个作业的目的。这个名称在 Flink 的执行日志和监控界面中会显示executionEnvironment.execute("file.txt -> result.csv");}public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {for (String word: sentence.split(" ")) {out.collect(new Tuple2<String, Integer>(word, 1));}}}
}

运行结果 将文章进行了分词处理
请添加图片描述

http://www.xdnf.cn/news/80.html

相关文章:

  • GPT对话UI--通义千问API
  • Linux 权限
  • 2025.4.17学习日记 初识JavaScript 以及Java和JavaScript有什么区别
  • 什么是分布式锁?
  • Linux: 生产者消费者模型
  • 从零开始学A2A四:A2A 协议的安全性与多模态支持
  • 多个路由器互通(静态路由)无单臂路由(简单版)
  • STM32 时钟树
  • TCP连接建立:为什么是三次握手?
  • 正则表达式在爬虫中的应用:匹配 HTML 和 JSON 的技巧
  • 操作教程|通过DataEase制作MaxKB系统数据大屏
  • QML之Overlay
  • R4打卡——pytorch实现LSTM预测火灾
  • 《vue3学习手记4》
  • openai发布今天发布了o3和o4-mini。
  • Vue 3 reactive 和 ref 区别及 失去响应性问题
  • 大数据常见的模型定义及应用场景建议╮(╯▽╰)╭
  • 深入理解常见排序算法:从原理到实践
  • 视频剪辑入门
  • 深入了解v-model的原理:v-model拆分为value属性和input事件,表单类组件的封装并用v-model简化代码
  • 是德科技E5080B网络分析仪深度评测:5G/车载雷达测试实战指南
  • 零基础上手Python数据分析 (16):DataFrame 常用统计分析方法
  • 【2025“华中杯”大学生数学建模挑战赛】C题:就业状态分析与预测 详细解题思路
  • ffmpeg 添加 nvenc支持
  • Layout 路由
  • 202520读书笔记|《我要按自己喜欢的方式去生活》——面对可能到来的裁员,那就等正式通知吧
  • SAP系统青果糖无法报工
  • 前沿要塞:Vue组件安全工程的防御体系重构与技术突围
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • 第十六届蓝桥杯大赛软件赛省赛 C++ 大学 B 组 部分题解