本系列文章将从热词统计需求讲起,讲解flink在实际项目中的应用、部署、容错。项目中的代码为scala所编写,没有用 java 的原因是scala语言看起来更加简练,同时与java语言的兼容性较好,可以直接引用java中的类。
定义数据格式
本篇文章会讲述热词统计最核心的一个功能实现,即消息传递过来的是搜索的单词,程序中进行统计。基于此我们定义传递的数据格式为 ${timestamp},${word} ,之所以有timestamp是为了标注搜索时间,用于修正flink中的watermask
离线数据模拟
定义好了数据格式之后,我们可以将其转换为scala中的Tuple,这里我们先利用fromElements api 创建离线数据用于调试
val currentTimeStamp = System.currentTimeMillis()
val dataStream = env.fromElements(
(currentTimeStamp,"word1"),
(currentTimeStamp+1,"word2"),
(currentTimeStamp+2,"word1"),
(currentTimeStamp+3,"word3"),
)
复制代码
具体计算
我们要实现统计的功能,即求和,需要flink中的sum这个operator,通过[flink-1.8文档/操作符]发现,只有keyedStream这个对象才有sum方法,所以在执行sum之前得先调用keyBy方法将dataStream转换为keyedStream。接下来是这两个方法具体的