Flink基本理解

Flink是什么?

是一个框架和分布式处理引擎,用于对无界或有界数据流进行有状态计算。

无界流

定义流的开始,没有定义流的结束,会无休止的产生数据,无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都达到再处理,因为输入是无限的。

有界流

有定义流的开始,也有定义流的结束,有界流可以在摄取所有数据后再进行计算,有界流的所有数据可以被排序,所以并不需要有序摄取;有界流处理通常被称为批处理。

有状态流处理

把流处理需要的额外数据保存为一个"状态",然后针对这条数据进行处理,并且更新状态,这就是所谓的"有状态的流处理"

Flink特点

高吞吐和低延迟

每秒处理百万个事件,毫秒级延迟;

结果的准确性

Flink提供了事件事件和处理时间语义,对于乱序事件流,事件事件语义仍然提供一致且准确的结果。

精确一次

精确一次的状态一致性保证

可以连接到最常见的存储系统

如kafka、Hive、JDBC、HDFS、Redis等

高可用

本身高可用的设置,加上K8s,YARN和Mesos的紧密集成,再加上从故障中快速恢复和动态扩展任务的能力,Flink能做到

使用Flink实现wordcount

复制代码
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.AggregateOperator;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.operators.FlatMapOperator;
import org.apache.flink.api.java.operators.UnsortedGrouping;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;

public class BatchWordCount {

    public static void main(String[] args) throws Exception {

        // 1. 创建执行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        
        // 2. 从文件读取数据  按行读取(存储的元素就是每行的文本)
        DataSource<String> lineDS = env.readTextFile("input/words.txt");
        
        // 3. 转换数据格式
        FlatMapOperator<String, Tuple2<String, Long>> wordAndOne = lineDS.flatMap(new FlatMapFunction<String, Tuple2<String, Long>>() {

            @Override
            public void flatMap(String line, Collector<Tuple2<String, Long>> out) throws Exception {

                String[] words = line.split(" ");

                for (String word : words) {
                    out.collect(Tuple2.of(word,1L));
                }
            }
        });

        // 4. 按照 word 进行分组
        UnsortedGrouping<Tuple2<String, Long>> wordAndOneUG = wordAndOne.groupBy(0);
        
        // 5. 分组内聚合统计
        AggregateOperator<Tuple2<String, Long>> sum = wordAndOneUG.sum(1);

        // 6. 打印结果
        sum.print();
    }
}

Flink角色

客户端

代码由客户端获取并做转换,之后提交给JobManager

JobManager

Flink集群的管事人,对作业进行中央调度管理,而它获取到执行的作业后,会进一步处理转换,然后分发任务给众多的TaskManager

TaskManager

真正干活的人,数据的处理操作都是它们来做。

相关推荐
WLJT12312312321 分钟前
藏在细节里的生活答案
大数据·生活
TDengine (老段)27 分钟前
TDengine 日期函数 DATE 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
q***656934 分钟前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
武子康2 小时前
大数据-165 Apache Kylin Cube7 实战:聚合组/RowKey/编码与体积精度对比
大数据·后端·apache kylin
paperxie_xiexuo3 小时前
面向多场景演示需求的AI辅助生成工具体系研究:十类平台的功能分型、技术实现与合规应用分析
大数据·人工智能·powerpoint·ppt
Hello.Reader3 小时前
在 Flink Standalone 集群上运行 Flink CDC从下载到跑起一个 MySQL→Doris 同步任务
大数据·mysql·flink
小熊officer3 小时前
Minio介绍
大数据
拓端研究室8 小时前
专题:2025AI产业全景洞察报告:企业应用、技术突破与市场机遇|附920+份报告PDF、数据、可视化模板汇总下载
大数据·人工智能·pdf
A尘埃9 小时前
Flink实时数据处理
大数据·flink·实时数据处理
金融小师妹10 小时前
基于NLP语义解析的联储政策信号:强化学习框架下的12月降息概率回升动态建模
大数据·人工智能·深度学习·1024程序员节