文章目录你未必出类拔萃,但一定与众不同
- Flink入门
- 选择Flink
- 我们的目标
- 需要处理流数据的行业
- Flink 的主要特点
- 事务驱动
- 分层API
- 支持事件时间和处理时间语义
- 高可用 动态扩展 实现7*24小时全天候运行
- 安装flink
- flink简单上手
- 1.打开idea 创建maven项目 写入依赖
- test.txt
- 2.批处理
- 3.流处理
- 4.输出结果
- 监听socket实时获取数据
- 1.启动ubuntu 输入 nc -lk 7777 开启监听模式,用于指定nc将处于监听模式。
- 2.修改maven中的代码
- 3.实时打印输出
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。 选择Flink
-
流数据更真实地反映了我们的生活方式
-
传统的数据结构是基于有限数据集的
- 低延迟 - 高吞吐 - 结果的准确性 - 良好的容错性需要处理流数据的行业
-
电商和市场营销
数据报表 广告投放 业务流程需要
-
物联网IOT
传感器实时数据采集和显示 实时报警 交通运输业
-
电信业
基站流量调配
-
银行和金融业
实时结算和通知推送,实时检测异常行为
基于流的世界观,一切都是由流组成的,离线数据是有界的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流
分层API越顶层越抽象,表达含义越简明,使用越方便
越顶层越具体,表达能力越丰富,使用越灵活
支持事件时间和处理时间语义精确一次的状态一致性保证
低延迟,每秒处理数百万个事件毫秒级延迟
与众多常用存储系统的连接
高可用 动态扩展 实现7*24小时全天候运行 安装flink1.前往官网下载flink https://flink.apache.org/downloads.html
这里下载的是1.8.1
链接:https://pan.baidu.com/s/1lHZSstEuSYXyHLhBIXIi1g
提取码:1234
2.下载成功后解压缩到当前文件夹。使用cmd进入命令窗口 进入bin目录下 运行 start-cluster.bat
3.访问http://localhost:8081 访问成功即是下方页面
flink简单上手 1.打开idea 创建maven项目 写入依赖test.txtorg.apache.flink flink-java 1.10.1 org.apache.flink flink-streaming-java_2.12 1.10.1
Life is always let us was black and blue all over but afterwards the injured local will become our most strong place Every adversity every failure every heartache carries with it the seed on an equivalent or greater benefit2.批处理
public class WordCount {
public static void main(String[] args) throws Exception {
//创建执行环境
ExecutionEnvironment environment = ExecutionEnvironment.getExecutionEnvironment();
//从文件读取数据
String inputSrc = "E:\JavaProject\flink\FlinkTutorial\src\main\resources\test.txt";
DataSet stringDataSource = environment.readTextFile(inputSrc);
//对数据集进行处理,按空格分词展开,转换成
DataSet> resultSet = stringDataSource.flatMap(new MyFlatMapper())
.groupBy(0) //按照第一个位置的word分组
.sum(1); //将第二个位置上的数据求和
resultSet.print();
}
//自定义类。实现FlatMapFunction
public static class MyFlatMapper implements FlatMapFunction>{
public void flatMap(String s, Collector> collector) throws Exception {
//按空格进行分词
String[] words = s.split(" ");
for (String word : words) {
collector.collect(new Tuple2(word,1));
}
}
}
}
3.流处理
public class StreamWordCount {
public static void main(String[] args) throws Exception {
//创建执行环境
StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();
//设置线程并行数
environment.setParallelism(8);
//从文件读取数据
String inputSrc = "E:\JavaProject\flink\FlinkTutorial\src\main\resources\test.txt";
DataStream stringData = environment.readTextFile(inputSrc);
//基于数据流进行转换计算
SingleOutputStreamOperator> resultSet = stringData.flatMap(new WordCount.MyFlatMapper())
.keyBy(0) //按照第一个位置的word分组
.sum(1); //将第二个位置上的数据求和
resultSet.print();
environment.execute();
}
}
4.输出结果
批处理结果
(an,1) (Life,1) (black,1) (let,1) (or,1) (carries,1) (every,2) (always,1) (will,1) (afterwards,1) (and,1) (equivalent,1) (local,1) (seed,1) (Every,1) (greater,1) (benefit,1) (on,1) (all,1) (injured,1) (blue,1) (failure,1) (is,1) (us,1) (with,1) (our,1) (strong,1) (heartache,1) (most,1) (place,1) (the,2) (adversity,1) (become,1) (but,1) (it,1) (over,1) (was,1)
流处理结果
7> (with,1) 8> (is,1) 1> (it,1) 7> (always,1) 3> (blue,1) 2> (on,1) 8> (let,1) 6> (afterwards,1) 4> (every,1) 3> (all,1) 6> (strong,1) 3> (over,1) 5> (Life,1) 5> (us,1) 5> (was,1) 4> (heartache,1) 5> (carries,1) 1> (greater,1) 2> (equivalent,1) 8> (black,1) 7> (become,1) 8> (and,1) 8> (but,1) 8> (injured,1) 7> (adversity,1) 8> (an,1) 3> (local,1) 6> (or,1) 3> (will,1) 3> (our,1) 2> (Every,1) 5> (the,1) 4> (seed,1) 5> (most,1) 4> (benefit,1) 3> (place,1) 6> (failure,1) 5> (the,2) 4> (every,2)监听socket实时获取数据 1.启动ubuntu 输入 nc -lk 7777 开启监听模式,用于指定nc将处于监听模式。 2.修改maven中的代码
public class StreamWordCount {
public static void main(String[] args) throws Exception {
//创建执行环境
StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();
//设置线程并行数
environment.setParallelism(8);
//从socket文本流读取数据
DataStream inputDataStream = environment.socketTextStream("localhost",7777);
//基于数据流进行转换计算
SingleOutputStreamOperator> resultSet = inputDataStream.flatMap(new WordCount.MyFlatMapper())
.keyBy(0) //按照第一个位置的word分组
.sum(1); //将第二个位置上的数据求和
resultSet.print();
environment.execute();
}
}
3.实时打印输出
3> (hello,1) 5> (world,1) 4> (find,1) 4> (name,1) 1> (english,1) 5> (study,1)



