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

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

相关推荐
鸭鸭鸭进京赶烤15 分钟前
大学专业科普 | 云计算、大数据
大数据·云计算
G皮T4 小时前
【Elasticsearch】自定义评分检索
大数据·elasticsearch·搜索引擎·查询·检索·自定义评分·_score
搞笑的秀儿7 小时前
信息新技术
大数据·人工智能·物联网·云计算·区块链
SelectDB7 小时前
SelectDB 在 AWS Graviton ARM 架构下相比 x86 实现 36% 性价比提升
大数据·架构·aws
二二孚日8 小时前
自用华为ICT云赛道Big Data第五章知识点-Flume海量日志聚合
大数据·华为
二二孚日10 小时前
自用华为ICT云赛道Big Data第四章知识点-Flink流批一体分布式实时处理引擎
大数据·华为
xufwind11 小时前
spark standlone 集群离线安装
大数据·分布式·spark
AI数据皮皮侠11 小时前
中国区域10m空间分辨率楼高数据集(全国/分省/分市/免费数据)
大数据·人工智能·机器学习·分类·业界资讯
昱禹12 小时前
Flutter 3.29+使用isar构建失败
大数据·flutter
DeepSeek大模型官方教程13 小时前
NLP之文本纠错开源大模型:兼看语音大模型总结
大数据·人工智能·ai·自然语言处理·大模型·产品经理·大模型学习