Flink 简介和简单的demo

Apache Flink 是一个开源的流处理框架,它具有高吞吐量、低延迟、精确一次(exactly-once)状态一致性等诸多优秀特性。

  • 流批一体:它能够以统一的方式处理流式数据和批量数据,既可以对实时持续流入的数据流进行高效处理,也可以像传统批处理那样对静态数据集进行操作,打破了流处理和批处理之间的界限。
  • 状态管理:提供了强大且易用的状态管理机制,允许在处理数据过程中保存和更新中间状态,方便实现诸如窗口聚合、复杂事件处理等功能,并且能保证状态的一致性,在遇到故障等情况时可以准确恢复状态。
  • 事件时间处理:很好地支持基于事件实际发生时间来进行处理,而不是数据到达系统的时间,这对于处理乱序数据等场景极为重要,能确保计算结果的准确性。
  • 灵活的窗口机制:拥有丰富多样的窗口类型,比如滚动窗口、滑动窗口、会话窗口等,可以根据不同的业务需求灵活地对数据进行分组和聚合操作。

Flink 在很多领域都有广泛应用,例如实时数据分析、实时监控告警、实时推荐系统等,能够助力企业快速、准确地处理海量实时数据并获取有价值的洞察。

以下是一个简单的基于 Flink 的示例代码,展示了如何从一个文本流中统计单词出现的次数:

  1. 引入依赖
    首先需要在项目的pom.xml(如果是 Maven 项目)中添加 Flink 相关依赖,示例如下:

登录后复制

xml 复制代码
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-java</artifactId>
    <version>1.16.0</version>  <!-- 根据实际情况选择合适版本 -->
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java_2.11</artifactId>
    <version>1.16.0</version>
</dependency>
  1. 编写代码

登录后复制

java 复制代码
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

public class WordCount {
    public static void main(String[] args) throws Exception {
        // 创建执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 从元素构建数据源,这里模拟一个简单的文本流(实际中可以对接如Kafka等数据源)
        DataStream<String> textStream = env.fromElements("hello world", "hello flink", "world flink");

        // 对文本流进行处理,先分割单词,再转换为(word, 1)的形式,便于后续统计
        DataStream<Tuple2<String, Integer>> wordAndOneStream = textStream.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            @Override
            public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
                String[] words = value.split(" ");
                for (String word : words) {
                    out.collect(Tuple2.of(word, 1));
                }
            }
        });

        // 按照单词进行分组,并对每组的计数进行求和,得到单词出现次数的统计结果
        DataStream<Tuple2<String, Integer>> wordCountStream = wordAndOneStream.keyBy(0).sum(1);

        // 输出结果到控制台
        wordCountStream.print();

        // 执行任务
        env.execute("WordCount Example");
    }
}

在上述代码中:

  • 首先通过StreamExecutionEnvironment.getExecutionEnvironment()创建了 Flink 的流处理执行环境。
  • 接着利用env.fromElements模拟了一个简单的文本数据流。
  • 通过flatMap操作对文本流中的每个元素(每行文本)进行单词分割,并将每个单词转换为(word, 1)的二元组形式。
  • 然后使用keyBy按照单词进行分组,再通过sum操作对每个分组内代表出现次数的数字(初始都是 1)进行求和,最终得到每个单词出现的次数统计结果,并且通过print输出到控制台。最后调用env.execute启动整个任务的执行。

请注意:

  • 上述只是一个非常基础的示例,实际应用中,数据源往往会是从外部系统(如消息队列、文件系统持续读取等)获取实时数据。
  • 代码中的 Flink 版本号可根据实际需求和项目兼容性进行调整。
相关推荐
B站计算机毕业设计之家1 小时前
基于大数据热门旅游景点数据分析可视化平台 数据大屏 Flask框架 Echarts可视化大屏
大数据·爬虫·python·机器学习·数据分析·spark·旅游
Jackeyzhe2 小时前
Flink学习笔记:如何做容错
flink
亿坊电商3 小时前
无人共享茶室智慧化破局:24H智能接单系统的架构实践与运营全景!
大数据·人工智能·架构
老蒋新思维3 小时前
创客匠人峰会新解:AI 时代知识变现的 “信任分层” 法则 —— 从流量到高客单的进阶密码
大数据·网络·人工智能·tcp/ip·重构·创始人ip·创客匠人
Jerry.张蒙3 小时前
SAP业财一体化实现的“隐形桥梁”-价值串
大数据·数据库·人工智能·学习·区块链·aigc·运维开发
一勺-_-4 小时前
.git文件夹
大数据·git·elasticsearch
秋刀鱼 ..5 小时前
2026年电力电子与电能变换国际学术会议 (ICPEPC 2026)
大数据·python·计算机网络·数学建模·制造
G皮T6 小时前
【Elasticsearch】 大慢查询隔离(一):最佳实践
大数据·elasticsearch·搜索引擎·性能调优·索引·性能·查询
expect7g7 小时前
Paimon源码解读 -- Compaction-6.CompactStrategy
大数据·后端·flink
武子康8 小时前
大数据-183 Elasticsearch - 并发冲突与乐观锁、分布式数据一致性剖析
大数据·后端·elasticsearch