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

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

相关推荐
TDengine (老段)40 分钟前
TDengine 中 TDgp 中添加机器学习模型
大数据·数据库·算法·机器学习·数据分析·时序数据库·tdengine
希艾席帝恩2 小时前
拥抱智慧物流时代:数字孪生技术的应用与前景
大数据·人工智能·低代码·数字化转型·业务系统
Bar_artist2 小时前
离线智能破局,架构创新突围:RockAI与中国AI的“另一条车道”
大数据·人工智能
牛客企业服务4 小时前
2025校招AI应用:校园招聘的革新与挑战
大数据·人工智能·机器学习·面试·职场和发展·求职招聘·语音识别
电商数据girl5 小时前
如何利用API接口与网页爬虫协同进行电商平台商品数据采集?
大数据·开发语言·人工智能·python·django·json
TDengine (老段)5 小时前
TDengine 中 TDgpt 异常检测的数据密度算法
java·大数据·算法·时序数据库·iot·tdengine·涛思数据
蚂蚁数据AntData5 小时前
DB-GPT 0.7.3 版本更新:支持Qwen3 Embedding和Reranker模型、支持知识库自定义检索策略等
大数据·开源·全文检索·数据库架构
暖苏6 小时前
python-异常(笔记)
大数据·开发语言·笔记·python·异常
松果财经9 小时前
外卖“0元购”退场后,即时零售大战才刚开始
大数据·人工智能
永洪科技9 小时前
永洪科技华西地区客户交流活动成功举办!以AI之力锚定增长确定性
大数据·人工智能·科技·数据分析·数据可视化