先来看看有界流的代码:

package com.mischen.it;import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;import java.util.Arrays;/*** @ClassName StreamWordCount* @Description DOTO 有界流* @Author mischen* @Date 2021/6/20 0020 8:55* @Version 1.0**/
public class StreamWordCount{public static void main(String[] args) throws Exception{// 1. 创建流式执行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 2. 读取文件DataStreamSource<String> lineDSS = env.readTextFile("input/word.txt");// 3. 转换数据格式SingleOutputStreamOperator<Tuple2<String, Long>> wordAndOne = lineDSS.flatMap((String line, Collector<String> words) -> {Arrays.stream(line.split(" ")).forEach(words::collect);}).returns(Types.STRING).map(word -> Tuple2.of(word, 1L)).returns(Types.TUPLE(Types.STRING, Types.LONG));// 4. 分组KeyedStream<Tuple2<String, Long>, String> wordAndOneKS = wordAndOne.keyBy(t -> t.f0);// 5. 求和SingleOutputStreamOperator<Tuple2<String, Long>> result = wordAndOneKS.sum(1);// 6. 打印result.print();// 7. 执行env.execute();}
}

有界流的输出:

无界流的代码:

package com.mischen.it;import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;import java.util.Arrays;/*** @ClassName StreamUnbondWordCount* @Description DOTO 无界流* @Author mischen* @Date 2021/6/20 0020 10:38* @Version 1.0**/
public class StreamUnbondWordCount {public static void main(String[] args) throws Exception{// 1. 创建流式执行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 2. 读取文件DataStreamSource<String> lineDSS = env.socketTextStream("hadoop162", 9999);// 3. 转换数据格式SingleOutputStreamOperator<Tuple2<String, Long>> wordAndOne = lineDSS.flatMap((String line, Collector<String> words) -> {Arrays.stream(line.split(" ")).forEach(words::collect);}).returns(Types.STRING).map(word -> Tuple2.of(word, 1L)).returns(Types.TUPLE(Types.STRING, Types.LONG));// 4. 分组KeyedStream<Tuple2<String, Long>, String> wordAndOneKS = wordAndOne.keyBy(t -> t.f0);// 5. 求和SingleOutputStreamOperator<Tuple2<String, Long>> result = wordAndOneKS.sum(1);// 6. 打印result.print();// 7. 执行env.execute();}
}

无界流的输入是需要远程输入数据才能得到结果,运行完之后程序并没有停止,可以实时统计计算结果。而有界流需要有明确的开始和结束时间,并且程序运行完之后程序要停止,使用于离线数据的处理。

流与批的世界观

批处理的特点是有界、持久、大量,非常适合需要访问全套记录才能完成的计算工作,一般用于离线统计。

流处理的特点是无界、实时,  无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计。

在spark的世界观中,一切都是由批次组成的,离线数据是一个大批次,而实时数据是由一个一个无限的小批次组成的。

而在flink的世界观中,一切都是由流组成的,离线数据是有界限的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流。

无界数据流:

无界数据流有一个开始但是没有结束,它们不会在生成时终止并提供数据,必须连续处理无界流,也就是说必须在获取后立即处理event。对于无界数据流我们无法等待所有数据都到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)获取event,以便能够推断结果完整性。

有界数据流:

有界数据流有明确定义的开始和结束,可以在执行任何计算之前通过获取所有数据来处理有界流,处理有界流不需要有序获取,因为可以始终对有界数据集进行排序,有界流的处理也称为批处理

深刻理解Flink的有界流和无界流相关推荐

  1. Flink——有界流VS无界流

    什么是有界流和无界流? 有界流 有定义流的开始,也有定义流的结束. 有界流可以在摄取所有数据后再进行计算. 有界流所有数据可以被排序,所以并不需要有序摄取. 有界流处理通常被称为批处理 有界流,Fli ...

  2. 一文了解Flink数据-有界数据与无界数据

    在常规的数据处理中,我们最常访问的可能是来自于Mysql,文本等存储介质中的数据,对其进行计算分析.但是现在也越来越的出现流式计算的场景,对于某些时刻产生的数据能够进行实时性的分析.例如天猫双十一实时 ...

  3. Flink-有界流与无界流

    什么是有界流和无界流? 有界流 有定义流的开始,也有定义流的结束. 有界流可以在摄取所有数据后再进行计算. 有界流所有数据可以被排序,所以并不需要有序摄取. 有界流处理通常被称为批处理. 有界流,Fl ...

  4. flink介绍:有界流和无界流

    日志:

  5. 阻塞队列,有界队列,无界队列

    在并发编程中,有时候需要使用线程安全的队列.如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法. 使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和 ...

  6. 聊聊Java中的并发队列中 有界队列和无界队列的区别

    转载自 https://blog.csdn.net/AJ1101/article/details/81711812 本文主要总体的说一说各种并发队列  首先来一张全体照  从有界无界上分  常见的有界 ...

  7. 大数据之无界数据流和有界数据流

    无界流:有一个开始但是没有结束,不会在生成时终止并提供数据,必须连续处理无界流,也就是说必须在获取后立即处理event.对于无界数据流我们无法等待所有数据都到达,因为输入是无界的,并且在任何时间点都不 ...

  8. 部门有界 数据无界 大数据需要大胸怀

    最近在推进一些跨域的事情,聆听了一些教诲,获得了一些新的感悟,作为大数据管理者,拥有技术是远远不够的,更需要有大胸怀,特此分享于你. 1. 在架构层面,大数据平台要是企业级的 大数据平台从技术层面讲没 ...

  9. 怎么理解无界队列和有界队列

    有界队列:就是有固定大小的队列.比如设定了固定大小的 LinkedBlockingQueue,又或者大小为 0,只是在生产者和消费者中做中转用的 SynchronousQueue. 无界队列:指的是没 ...

最新文章

  1. python基础知识填空-Python基础知识(1)
  2. ScrollViewer滚动究竟来触发载入数据的Behavior
  3. jquery页面跳转带cookie_JS 如何创建、读取和删除cookie
  4. Ubuntu20.04 编译运行apue.3e 避坑指南
  5. 【原创】设计模式面对面之观察者模式
  6. 来自运维伪大佬的叨叨
  7. element-ui表单验证
  8. 解密阿里线上问题诊断工具Arthas和jvm-sandbox
  9. 公交非接触IC卡读写器的应用设计
  10. 计算机操作员高级教学大纲,计算机操作员课程教学大纲.doc
  11. 几款在线脑图制作工具
  12. 小白如何进入IT行业及如何选择培训机构
  13. opencv 解决ippicv下载问题,离线:ippicv_2019_lnx_intel64_general_20180723.tgz
  14. 递归中的return
  15. jquery-weui扩展功能Picker实现营业时间选择
  16. oracle 雪峰,讨论 - 廖雪峰的官方网站
  17. 定时器、看门狗和RTC-1.9.ARM裸机第九部分-朱有鹏-专题视频课程
  18. JDK1.8之Lambda
  19. KUKA机器人示教器讲解
  20. Autodesk 两场云以及移动为主题的Meetup线下交流会

热门文章

  1. KBPC610-ASEMI整流方桥6A 1000V
  2. weekend 04Nov2006...
  3. ionic混合app开发——ionic-native
  4. 一键清理Linux缓存脚本
  5. Ubuntu学习(一)
  6. mysql数据库报错:[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exi
  7. 代码混淆的原理是什么?常见代码混淆方法介绍
  8. Java8 stream流map方法使用
  9. 【Mysql】 Mac Mysql密码重置
  10. 如何使用sftp上传文件