首页 > 其他分享 >Flink系列一:flink光速入门 (^_^)

Flink系列一:flink光速入门 (^_^)

时间:2024-05-28 20:31:25浏览次数:25  
标签:flink 入门 批处理 Flink environment 处理 import

引入

spark和flink的区别:在上一个spark专栏中我们了解了spark对数据的处理方式,在 Spark 生态体系中,对于批处理和流处理采用了不同的技术框架,批处理由 Spark-core,SparkSQL 实现,流处理由 Spark Streaming 实现,但是Flink 可以用同一套代码同时实现批处理和流处理

虽然spark和flink都可以进行批处理和流处理,但是侧重点不同,spark侧重于批处理,flink侧重于流处理。而且Spark Streaming准确来说并不是严格意义上的实时,它本质上还是一种微批处理的结构,用近实时描述更准确,所以使用Spark Streaming来做实时计算会发现延时很高。这也是会出现flink去代替Spark Streaming完成实时计算的原因之一。

一、离线和实时的区别

首先要明确一个概念,离线计算也叫做批量处理,实时计算也叫做流式处理,都是同一种东西,只是叫法不同。

1、离线(批处理)和实时(流处理)的区别:

       批处理的特点是有界、大量,批处理非常适合需要访问全套记录才能完成的计算工作,一般用于离线统计。流处理的特点是无界、实时,流处理方式无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计。

二、主流实时计算框架对比

声明式:描述所需的数据转换和输出,而框架负责如何实现这些转换。它更加关注于“做什么”,而不是“如何做”。

组合式:开通过编写具体的指令来控制数据的流动和处理。

三、Spark Streaming微批处理 与Flink流式处理对比

从上图我们就可以看出Spark Streaming处理的方式是每隔一段时间,将该段时间产生的所有数据集中起来一起处理,而Flink流式处理是将数据产生一条就处理一条,这也是flink实时处理延迟低的原因。

四、Apache Flink简介

1、概述

        Apache Flink 是一个实时计算框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。

2、Flink特性

十大特性:

3、Apache Flink组件栈

4、Flink API 层级具体划分

---------------------------------------------------------------------------------------------------------------------------------简要的介绍到这里结束,下一篇文章开始正式的学习。下面写一个简单的入门案例配上图解,便于对flink的理解。

五、入门案例(WordCount)

1、单词统计案例1(流处理/实时)

import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class Demo1StreamWordCount {
    public static void main(String[] args) throws Exception {
        //1、获取flink执行环境
        StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();

        //设置任务的并行度,一个并行度相当于一个task
        environment.setParallelism(2);

        //设置数据从上游发送到下游的延迟时间,也可以不设置,默认延迟为200ms
        /*
             (1)一个正整数会根据该整数周期性地触发刷新
             (2)0在每条记录后触发刷新,从而最大限度地减少延迟
             (3)-1只在输出缓冲区已满时触发刷新,从而最大限度地提高吞吐量
         */
        environment.setBufferTimeout(200);

        //2、读取数据
        //在命令行执行nc -lk 8888来模拟实时数据生成
        DataStream<String> wordDS = environment.socketTextStream("master", 8888);

        //3、统计单词数量
        DataStream<Tuple2<String, Integer>> wordKVDS = wordDS.map(
                word->Tuple2.of(word,1), Types.TUPLE(Types.STRING,Types.INT)
                );

        //3、1分组统计单词的数量
        KeyedStream<Tuple2<String, Integer>, String> wordKeyBY = wordKVDS.keyBy(kv -> kv.f0);

        //3.2对下标为1的列求和
        DataStream<Tuple2<String, Integer>> wordCounts = wordKeyBY.sum(1);

        //打印数据
        wordCounts.print();

        //启动flink
        environment.execute();
    }
}

运行结果:

代码流程图解:

2、单词统计案例2(批处理/离线)

import org.apache.flink.api.common.RuntimeExecutionMode;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class Demo2BatchWorldCounr {
    public static void main(String[] args) throws Exception {
        //1、创建Flink运行环境
        StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();

        /*
         *处理模式:
         * RuntimeExecutionMode.BATCH:批处理模式(MapReduce模型)
         * 1、输出最终结果
         * 2、批处理模式只能用于处理有界流
         *
         * RuntimeExecutionMode.STREAMING:流处理模式(持续型模型)
         * 1、输出连续结果(换句话说就是会不断输出中间结果)
         * 2、流处理模式,有界流和无界流都可以处理
         */

        //设置处理模式,如果不设置,默认是流处理模式
        environment.setRuntimeMode(RuntimeExecutionMode.BATCH);

        //2、读取文件(有向流)
        DataStream<String> wordDs = environment.readTextFile("flink/data/words.txt");

        //3、统计单词数量
        DataStream<Tuple2<String, Integer>> kvDS = wordDs.map(word -> Tuple2.of(word, 1), Types.TUPLE(Types.STRING, Types.INT));

        //3.1分组统计单词数量
        KeyedStream<Tuple2<String, Integer>, String> keyBy = kvDS.keyBy(kv -> kv.f0);

        //3.2对下标为1的列求和
        DataStream<Tuple2<String, Integer>> wordCounts = keyBy.sum(1);

        //打印数据
        wordCounts.print();

        //启动flink
        environment.execute();
    }
}

运行结果:

注意:在引入便提到过,上述两个案例用的都是同一套代码,flink能够使用同一套代码执行流处理和批处理,完成了流批统一(批流一体)。

标签:flink,入门,批处理,Flink,environment,处理,import
From: https://blog.csdn.net/weixin_52134189/article/details/139250902

相关文章

  • 深度学习入门:3.手写数字分类
    这一章将基于Pytorch在只用全连接网络情况下实现手写数字识别,让大家基本了解怎么实现模型训练和预测使用。完整代码在最下面。一.MNIST数据集1.数据集介绍MNIST数据集包含60,000个训练样本和10,000个测试样本,每个样本都是28x28像素的灰度图像,表示一个0到9的手写......
  • 普通程序员深度学习教程(fastai及PyTorch)1深度学习快速入门-1简介
    1深度学习快速入门本章介绍深度学习背后的关键概念,并在不同的任务中训练我们的第一个模型。如果你不是技术或数学专业出身,也没有关系,我们从工程应用的角度入手,而不是数学科学。1.1深度学习没那么难多数深度学习不需要:高深的数据基础,实际高中数学已经够用大量数据:实际最低小......
  • 学习方法--NLP入门
    1.了解NLP的最基本知识        Jurafsky和Martin的SpeechandLanguageProcessing是领域内的经典教材,对于NLP任务有基本认识,遇到问题知道在书的哪个地方还是非常有意义的。去做一个语言模型的问题,实现神经网络模型之前,第一步要去写一个bigram或者trigram的语言模......
  • 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了这篇文章没有什么套路。就是一套自学理论和方向,具体的需要配合网络黑白去学习。毕竟是有网络才会有黑白!有自学也有培训!黑客进阶资源资料包1.打死也不要相信什么分分钟钟教你成为大黑阔的,各种包教包会的教程,就算......
  • 【go从入门到精通】精通并发编程-使用atomic管理状态和同步的无锁技术
    了解原子计数器        在Go中,原子计数器是多个goroutine可以同时访问的共享变量。术语“原子”是指在计数器上执行的操作的不可分割的性质。在Go中,原子计数器允许多个goroutine安全地更改共享变量,而无需使用锁或任何其他显式同步,这可确保数据完整性并避免竞......
  • 网关路由快速入门
    在SpringBoot中整合SpringCloudGateway是一个常见的需求,尤其是当需要构建一个微服务架构的应用程序时。SpringCloudGateway是SpringCloud生态系统中的一个项目,它提供了一个API网关,用于处理服务之间的请求路由、安全、监控和限流等功能。使用引入依赖<dependency>......
  • Vue+OpenLayers7入门到实战:OpenLayers实现在地图上拖拽编辑修改绘制图形
    返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战前言本章介绍如何使用OpenLayers7在地图上拖拽编辑修改绘制图形。在前面一章中,我们已经学会了如何绘制基础的三种图形线段、圆形和多边形:《Vue+OpenLayers7入门到实战:OpenLayers图形绘制功能,OpenLayers实现在地......
  • Stable Diffusion 提示词入门指南
    前言本文主要讲解StableDiffusion(下文简称SD)提示词的用法,帮助大家生成更高质量的图片本章节主要讲解文生图,其他类型读者可以自行探索。同时本文主要是以StableDiffusionDiscard的形式生成图片如果各位对于图片隐私性、图片版权问题有要求,或是需要能力更加强大、......
  • AI大模型入门基础教程(非常详细),AI大模型入门到精通,收藏这一篇就够了!
    什么是AI大模型?AI大模型是指使用大规模数据和强大的计算能力训练出来的人工智能模型。这些模型通常具有高度的准确性和泛化能力,可以应用于各种领域,如自然语言处理、图像识别、语音识别等。为什么要学AI大模型?2024人工智能大模型的技术岗位与能力培养随着人工智能技术......
  • 强化学习快速入门
    本文章通过强化学习快速入门(https://zhuanlan.zhihu.com/p/699934259)在线发布并更新。1.强化学习直观理解强化学习的应用场景是马尔可夫过程,很多现实中的问题都可以认为是马尔可夫过程,特征是当前状态仅仅与前一个状态有关,而与更早的状态无关。按照随机过程的定义:\[\begin{ali......