• 无限数据源,有限数据源
  • DataStream
  • EventTime 与 Watermark
1
2
3
当我们说“统计过去一小时内点击量”,这里的“一小时”是指什么呢? 在 Flink 中它可以是指 ProcessingTime ,也可以是 EventTime,由用户决定。
- ProcessingTime:事件被处理的时间。也就是由机器的系统时间来决定。
- EventTime:事件发生的时间。一般就是数据本身携带的时间。

一般需要基于业务的EventTime 来处理

1
2
3
4
// 1. 告诉 Flink 我们现在按照 EventTime 模式进行处理,Flink 默认使用 ProcessingTime 处理,所以我们要显式设置下
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
// 2. 第二件事情是指定如何获得业务时间,以及生成 Watermark。

1
Watermark 是用来追踪业务事件的概念,可以理解成 EventTime 世界中的时钟,用来指示当前处理到什么时刻的数据了。由于我们的数据源的数据已经经过整理,没有乱序,即事件的时间戳是单调递增的,所以可以将每条数据的业务时间就当做 Watermark。这里我们用 AscendingTimestampExtractor 来实现时间戳的抽取和 Watermark 的生成。

文件来模拟真实数据源,本地验证 Flink 应用程序正确性的常用方式

Flink 零基础实战教程:如何计算实时热门商品

5分钟滑动一次,查看指定动作(开聊,发消息)最多的用户,推出来。【important】 设置一个阈值,可以调整,比如3分钟开聊最多的。

然后过滤。过滤正常的用户。

状态特征。
实时特征的存储。

安全的一个方向。