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

引入

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();//设置任务的并行度,一个并行度相当于一个taskenvironment.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();//启动flinkenvironment.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();//启动flinkenvironment.execute();}
}

运行结果:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/843292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是深拷贝和浅拷贝?

浅拷贝 浅拷贝是指将一个对象复制到另一个变量中&#xff0c;但是复制的是对象的地址&#xff0c;而不是对对象本身进行复制。原始对象的引用和复制对象的引用时期上是共享同一个内存地址的。 所以我们修改了复制引用指向的对象中的属性或方法&#xff0c;原始引用指向的对象…

metersphere发送kafka消息

上传jar包 设置前置脚本 import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; import java.util.Properties;// Kafka 生产者配置 Properties props new Properties(); props.put("bootstrap.servers&qu…

JavaWeb_SpringBootWeb

先通过一个小练习简单了解以下SpringBootWeb。 小练习&#xff1a; 需求&#xff1a;使用SpringBoot开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 步骤&#xff1a; 1.创建SpringBoot项目&#xff0c;勾选We…

【电源专题】功率电感啸叫对策及案例

在文章:【电源专题】功率电感器啸叫原因及典型案例 中我们了解到了电感器啸叫的原因和一些典型电路中产生电感啸叫的案例。通过案例我们了解到很多时候啸叫来源是DC-DC转换器的功率电感器,所以如果我们要降低或消除啸叫,那有哪些对策呢? 避免流过人耳可听频率电流 首先我们…

Spring Boot 中使用 Spring Retry 重试:再也不怕代码“掉链子”了

引言&#xff1a;生活需要重试&#xff0c;代码也一样&#xff01; 想象一下&#xff0c;你正在网上支付&#xff0c;结果网络突然卡顿&#xff0c;支付失败。这时候你会怎么做&#xff1f;当然是再试一次&#xff01;生活中我们经常会遇到各种“失败”&#xff0c;但我们会选…

猜猜我是谁游戏

猜谜过程 在TabControl控件中&#xff0c;第一个tab中放了一个PictureBox&#xff0c;里面有一张黑色的图片。 玩家点击显示答案按钮&#xff0c;切换图片。 设计器 private void button1_Click(object sender, EventArgs e){this.pictureBox1.Image Image.FromFile(&qu…

Covalent的CQT质押迁移比率在以太坊上升至13%,超Moonbeam记录

Covalent Network&#xff08;CQT&#xff09;作为领先的结构化模块化数据基础设施层&#xff0c;目前其在以太坊上的 CQT 质押比率已超过之前在 Moonbeam 上达到的历史最高水平。自从将质押合约迁移到以太坊不到一个月的时间里&#xff0c;超过总供应量的 13% 的 CQT 代币已被…

总结 HTTPS 的加密流程

一、前言 http是为了解决http存在的问题而在http基础上加入了SSL/TSL&#xff0c;在HTTP/2中TCP三次握手后会进入SSL/TSL握手&#xff0c;当SSL/TSL建立链接后&#xff0c;才会进行报文的传输。 二、HTTPS的混合加密 我们先来认识密钥&#xff1a; 密钥是用于加密和解密数据…

【MySQL事务(下)(重点)】

文章目录 再次理解MySQL事务一、MVCC机制数据库并发的场景有三种&#xff1a;3个记录隐藏列字段undo日志——由mysql维护的一段内存空间再次理解隔离性和隔离级别 Read View 理论部分RR 和 RC 的本质区别 再次理解MySQL事务 1.每个事务都有自己的事务ID&#xff0c;根据事务的…

Recognition:基于HoG特征的最近邻分类器与SVM的人物检测器

实际运行结果&#xff1a; 上面的为最近邻分类器&#xff0c;其中红框表示最近邻搜索的预测结果。下方的为SVM&#xff1a;橙色框表示SVM的预测结果。其中&#xff0c;最红的框表示SVM预测的最高得分的预测结果。 使用经典图像处理的方法开发简单人物检测器&#xff0c;其大致…

P148--章节作业1

编辑 编辑 public class Main {public static void main(String args[]){double yxq100000;int cishu0;while(true) {if(yxq > 50000) {yxq yxq - yxq * 0.05;cishucishu1;}else if(yxq > 1000){yxq yxq - 1000;cishucishu1;}else{break;}}System.out.print(cishu);} …

【分支控制】(switch) 详解

switch分支结构 基本语法 switch (表达式){case 常量1: //当...语句块1;break; //跳出switchcase 常量2:语句块2;break;...case 常量n;语句块n;break;default:default语句块;break;}switch 关键字, 表示switch分支表达式, 对应一个值case 常量1: 当表达式的值等于常量1, 就执行…

详解Spring MVC

目录 1.什么是Spring Web MVC MVC定义 2.学习Spring MVC 建立连接 RequestMapping 注解介绍及使用 获取单个参数 获取多个参数 获取普通对象 获取JSON对象 获取基础URL参数 获取上传文件 获取Header 获取Cookie 获取Session 总结 1.什么是Spring Web MVC 官⽅对于…

转型先锋!G7易流的数字化到底有多牛?

在供应链全球一体化进程中&#xff0c;国内外局势的改变&#xff0c;使得物流行业运力供大于求趋势愈加明显&#xff0c;国内供应链参与者面对内外发展需求和激烈的市场竞争&#xff0c;需要打破同质化竞争的局面&#xff0c;提供具有特色的服务&#xff0c;形成专业、高效、灵…

深度学习500问——Chapter09:图像分割(3)

文章目录 9.8 PSPNet 9.9 DeepLab系列 9.9.1 DeepLabv1 9.9.2 DeepLabv2 9.9.3 DeeoLabv3 9.9.4 DeepLabv3 9.8 PSPNet 场景解析对于无限制的开放词汇和不同场景来说是具有挑战性的。本文使用文中的 pyramid pooling module 实现基于不同区域的上下文集成&#xff0c;提出了PS…

OrangePi AIpro初识及使用大模型GPT-Neo-1.3B测试

OrangePi AIpro介绍 1.1. 开发板简介 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭 载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB 两种版本。可以实现图像、视频等多种数据分析与推理…

[xx点评完结]——白马点评完整代码+rabbitmq实现异步下单+资料,免费

项目所有功能已测&#xff0c;均可以跑通&#xff0c;Jmeter和RabbitMQ也都测了。 项目源码:dianpinghui: 仿黑马点评项目 资料: https://pan.baidu.com/s/1kTCn9PxgeIey90WgM4KRqA?pwdn66b 对佬有帮助可以给个star哈&#xff0c;感谢&#x1f339;&#x1f339;&#x1f3…

OpenHarmony 实战开发——内核IPC机制数据结构解析

一、前言 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目&#xff0c;目标是面向全场景、全连接、全智能时代&#xff0c;基于开源的方式&#xff0c;搭建一个…

【教学类-58-06】黑白三角拼图06(1页3张彩色黑点卡片,一种宫格36张,适合一个班级一次操作)

作品展示 背景需求 【教学类-58-05】黑白三角拼图05&#xff08;2-10宫格&#xff0c;每个宫格随机1张-6张&#xff0c;带空格纸&#xff0c;1页3张黑白3张白卡&#xff09;-CSDN博客文章浏览阅读343次&#xff0c;点赞10次&#xff0c;收藏6次。【教学类-58-05】黑白三角拼图…