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

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

相关推荐
难以触及的高度5 分钟前
优化Hadoop性能:如何修改Block块大小
大数据·hadoop·分布式
数数科技的数据干货2 小时前
如何避免你的高付费用户活跃度下降?
大数据·人工智能·游戏
Leo.yuan2 小时前
bi软件是什么?bi软件是做什么用的?
大数据·数据仓库·信息可视化·数据分析·数字化转型
数据要素X2 小时前
【数据架构03】数据治理架构篇
大数据·数据库·数据仓库·架构
搞不懂语言的程序员3 小时前
Elasticsearch简单集成java框架方式。
java·大数据·elasticsearch
菲路普科技4 小时前
作业过程管控——看安全生产信息化平台全方位解决方案
大数据·人工智能
叫我黎大侠4 小时前
使用 LibreOffice 实现各种文档格式转换(支持任何开发语言调用 和 Linux + Windows 环境)[全网首发,保姆级教程,建议收藏]
java·大数据·linux·开发语言·python·c#·php
189228048615 小时前
NV054NV057美光固态闪存NV059NV062
大数据·人工智能
Ultipa6 小时前
云计算与大数据进阶 | 27、存储系统如何突破容量天花板?可扩展架构的核心技术与实践—— 分布式、弹性扩展、高可用的底层逻辑(上)
大数据·架构·云计算