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

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));}}}
}

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

相关文章:

  • java IO/NIO/AIO
  • L2-033 简单计算器满分笔记
  • 十三种通信接口芯片——《器件手册--通信接口芯片》
  • 解决“驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接“问题
  • 【C++面向对象】封装(下):探索C++运算符重载设计精髓
  • C++每日训练 Day 16:构建 GUI 响应式信号机制(面向初学者)
  • android liveData observeForever 与 observe对比
  • class的访问器成员
  • TAS(Thin-Agent服务)的先决条件与安装指南
  • 安当ASP身份认证系统:低成本方案实现堡垒机/防火墙/VPN二次认证升级
  • 《Learning Langchain》阅读笔记2-基于 Gemini 的 Langchain PromptTemplate 实现方式
  • [C++] STL中的向量容器<vector>附加练习
  • 赛灵思 XCVU440-2FLGA2892E XilinxFPGA Virtex UltraScale
  • Qt 信号与槽复习
  • 【Springboot】项目Demo
  • git rebase的使用
  • 某客户ORA-600 导致数据库反复重启问题分析
  • 如何判断单片机性能极限?
  • Linux 网络配置
  • OpenHarmony - 小型系统内核(LiteOS-A)(七)
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • “救护车”半路加价?陕西卫健委已介入,记者调查:黑救护车挤占市场
  • 2025上海科技节本周六启幕,机器人和科学家同走AI科学红毯
  • 再获殊荣!IP SH跻身上海文化品牌全球传播力TOP 6
  • 区域国别学视域下的东亚文化交涉
  • 中国科学院院士徐春明不再担任山东石油化工学院校长