【README】

1.本文包含了 批处理与流处理的代码示例;

  • 批处理:把数据 攒在一起(或攒一段时间或攒一定内存大小),然后再处理,这叫批处理;
  • 流处理:数据每来一个就处理一个;

2.特点:

数据处理方式 特点
批处理 1.高延时;
流处理 1.低延时;

3.引入flink的maven依赖:

<dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-java</artifactId><version>1.14.4</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java_2.12</artifactId><version>1.14.4</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-clients_2.12</artifactId><version>1.14.4</version></dependency></dependencies>

【1】flink批处理离线数据(数据有限)

【1.1】代码

1)数据源,我们保存在本地文本文件中,命名为  hello.txt

hello world
hello flink
how are you
thank you
hello zhangsan
hello lisi

2)批处理代码:

/*** @Description 批处理,word count程序(离线数据)* @author xiao tang* @version 1.0.0* @createTime 2022年04月09日*/
public class WordCount {public static void main(String[] args) throws Exception {// 创建执行环境ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();// 从文件中读取数据String inputPath = "D:\\workbench_idea\\diydata\\flinkdemo2\\src\\main\\resources\\hello.txt";DataSource<String> dataSource = env.readTextFile(inputPath);// 对数据集处理,按照空格分词展开,转为 (word,1) 二元组统计DataSet<Tuple2<String, Integer>> resultSet = dataSource.flatMap(new MyFlatMapper()).groupBy(0) // 按照第1个位置的word分组.sum(1); // 将第2个位置上的数据求和resultSet.print();}public static class MyFlatMapper implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String value, Collector<Tuple2<String, Integer>> collector) throws Exception {// 按照空格分词String[] words = value.split(" ");// 遍历所有word,包装成word 输出Arrays.stream(words).forEach(x->{collector.collect(new Tuple2<>(x, 1));});}}
}

批处理打印结果:

(you,2)
(flink,1)
(world,1)
(hello,4)
(lisi,1)
(zhangsan,1)
(are,1)
(thank,1)
(how,1)

批处理的结果是最终结果;


【2】flink流处理离线数据(数据有限)

/*** @Description 流数据(无限数据)* @author xiao tang* @version 1.0.0* @createTime 2022年04月09日*/
public class StreamWordCount {public static void main(String[] args) throws Exception {// 流处理执行环境StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.getExecutionEnvironment();streamEnv.setParallelism(2); // 设置并行度// 从文件中读取数据String inputPath = "D:\\workbench_idea\\diydata\\flinkdemo2\\src\\main\\resources\\hello.txt";DataStream<String> dataStream = streamEnv.readTextFile(inputPath);// 定义流操作DataStream<Tuple2<String, Integer>> resultStream = dataStream.flatMap(new WordCount.MyFlatMapper()).keyBy(0).sum(1);// 打印结果resultStream.print();// 执行任务(流终止操作)streamEnv.execute();}
}

打印结果:

2> (world,1)
1> (thank,1)
2> (flink,1)
1> (hello,1)
2> (how,1)
2> (you,1)
1> (hello,2)
2> (you,2)
1> (hello,3)
2> (zhangsan,1)
1> (hello,4)
2> (lisi,1)
1> (are,1)

流处理的结果是一个动态变化的有状态的结果;

有状态的意思说白了就是:后面的处理结果依赖前面的处理结果,如对hello计数为3,它是在前面hello计数为2的基础上做的处理;


【3】flink流处理在线数据(数据无限)

我们引入了 netcat(nc),底层使用socket模拟向某端口写入数据;

然后 flink监控该端口的数据,并做处理;

【3.1】 flink处理类

处理类监听了 nc所在机器的的端口,即 192.168.163.201:7777;

/*** @Description socket文本流词计数* @author xiao tang* @version 1.0.0* @createTime 2022年04月09日*/
public class SocketTextStreamWordCount {public static void main(String[] args) throws Exception {// 流处理执行环境StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.getExecutionEnvironment();streamEnv.setParallelism(2); // 设置并行度// 从 flinkjava parametertool 获取参数(或有)
//        ParameterTool parameterTool = ParameterTool.fromArgs(args);
//        String host = parameterTool.get("host");
//        int port = parameterTool.getInt("port");// 从socket文本流读取数据DataStream<String> inputDataStream = streamEnv.socketTextStream("192.168.163.201", 7777);// 定义流操作DataStream<Tuple2<String, Integer>> resultStream = inputDataStream.flatMap(new WordCount.MyFlatMapper()).keyBy(0).sum(1);// 打印结果resultStream.print();// 执行任务(流终止操作)streamEnv.execute();}
}

演示效果:

pre1-flink理论-批处理与流处理+简单示例相关推荐

  1. python输入输出简单例子_Python 文件和流的简单示例

    这篇文章主要为大家详细介绍了Python 文件和流的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 1.打开文 ...

  2. flink的批处理和流处理

    核心内容: 1.流处理系统 2.批处理系统 3.flink的流处理和批处理 4.flink的流处理和批处理代码的区别 流处理系统与批处理系统最大不同在于节点间的数据传输方式 1.流处理系统 流处理系统 ...

  3. 大数据技术之Flink理论到项目

    转载自:https://www.javaxxz.com/thread-397416-1-1.html 一.Flink简介 如今的大数据技术应用场景,对实时性的要求已经越来越高.作为新一代大数据流处理框 ...

  4. 深入浅出时序数据库之预处理篇——批处理和流处理,用户可定制,但目前流行influxdb没有做...

    时序数据是一个写多读少的场景,对时序数据库以及数据存储方面做了论述,数据查询和聚合运算同样是时序数据库必不可少的功能之一.如何支持在秒级对上亿数据的查询分组聚合运算成为了时序数据库产品必须要面对的挑战 ...

  5. Flink SQL 批处理使用HOP详解

    Flink SQL 批处理使用HOP详解 介绍 Flink SQL中分组窗口函数中有一个HOP(time_attr, hop interval 滑动间隔, fixed duration 窗口时间),适 ...

  6. 什么是批处理,批处理与流处理的对比

    什么是批处理? 批处理是一种运行大量重复数据作业的方法.批处理方法允许用户在计算资源可用时处理数据,几乎不需要用户交互. 使用批处理,用户收集和存储数据,然后在一个称为"批处理窗口" ...

  7. [数据湖] 基于flink hudi的批流一体实践

    1.业务背景介绍 广告主和代理商通过广告投放平台来进行广告投放,由多个媒介进行广告展示 ,从而触达到潜在用户.整个过程中会产生各种各样的数据,比如展现数据.点击数据.其中非常重要的数据是计费数据,以计 ...

  8. Flink系列-1、流式计算简介

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 大数据系列文章目录 官方网址:https://flink.apache.org/ 学习资料:h ...

  9. UA MATH523A 实分析3 积分理论例题 Fubini定理计算简单二重积分的一个例题

    UA MATH523A 实分析3 积分理论例题 Fubini定理计算简单二重积分的一个例题 例 f∈L1([0,1])f \in L^1([0,1])f∈L1([0,1]), define h(x)= ...

最新文章

  1. 批量将中文单个字音频转为图像(二维矩阵)
  2. 【awk】用awk将Fasta文件序列变成一行
  3. UDP千兆以太网FPGA_verilog实现(三、代码前期准备-时序要求)
  4. python 时间序列预测 币价_python时间序列预测股票走势
  5. java liste_内功心法 -- java.util.ArrayListE (1)
  6. ***CSS3 Gradient渐变色(转:http://www.w3cplus.com/content/css3-gradient)
  7. Linux:搭建web服务器(二)
  8. 怎么把video文件改成mp4_怎么把视频转换成MP4格式?这招教你轻松搞定!
  9. storm tread 耐克_耐克 Nike Air Zoom Pegasus 35 Shield 登月35代跑鞋
  10. python结果不能全部显示_numpy矩阵数值太多不能全部显示的解决
  11. Django 运行报错 Manager isnt accessible via Category instances
  12. LA2402 Fishnet 四边形面积
  13. 浅谈 C/S 和 B/S 架构
  14. 批量删除win7下的隧道适配器
  15. 凹形长方形的周长计算_【原创】奥数解析(二十九)长方形和正方形的周长
  16. 使用PHP将pdf文件和图片进行合并
  17. 微信小程序之硅谷云音乐
  18. 国产蓝牙耳机哪个牌子好?口碑最好的国产蓝牙耳机推荐
  19. Android模拟器的检测
  20. 【python】字典去重

热门文章

  1. #2686. 「BalticOI 2013」雪地足迹 双端队列01bfs + 模型转换
  2. Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator 思维 + 树状数组
  3. ABC 189 E - Rotate and Flip 矩阵转移
  4. 【NOI2016】国王饮水记【贪心】【斜率优化】【决策单调性】
  5. CF611F. New Year and Cleaning
  6. [BZOJ3944] Sum
  7. CF700E Cool Slogans(SAM,dp)
  8. CF960G-Bandit Blues【第一类斯特林数,分治,NTT】
  9. CF346E-Doodle Jump【类欧】
  10. P1552-[APIO2012]派遣【左偏树】