flink的优势
- flink适合进行全局去重,全局聚合操作,比如distinct ,uv等业务场景。spark streaming做起来比较麻烦,想要实现需要借助状态算子或者第三方存储,比如redis,alluxio等。
- flink的trigger可以支持同一个窗口多次输出。
- flink可以通过其分布式checkpoint的性质结合sink的事物(分布式两段提交协议)来实现仅一次处理。flink也可以利用sink的幂等性来实现仅一次处理。
- 更容易实现ddl,dml等完整的sql支持,进而实现完全sql实现业务开发,类似blink。
- flink可以方便地使用文件后端实现大状态管理,但是频繁发作也会引发linux系统操作文件的一些bug。
什么是PV、UV?
PV:页面点击次数
UV:独立用户访问次数
Window
窗口是处理数据流的核心,Windows将流分成有限大小的“存储桶”,我们可以在其上应用计算。
Time
考虑到网络的延迟和数据的乱序,不能简单的使用Flink的系统时间做统计。
在Flink中,有以下三种时间特征:
- Processing time:Operator处理数据的时间。
- Event time : 事件发生时间。
- Ingestion time:被Flink摄入的时间。
在统计PV UV时,我们需要根据用户访问的时间,所以使用Event Time。