我可以将数据流时间窗口设置为一个大值,如 24 小时吗?提出要求的原因是我想根据网站最近的 24 小时客户端流量进行数据统计。这样,我可以检查是否存在安全违规行为。
例如,检查用户帐户是否使用多个源 IP 登录到网站。或者检查某个 IP 在最近 24 小时内访问了多少个唯一页面。如果检测到安全违规,将实时执行配置的操作,例如阻止源 IP 或锁定相关用户帐户。
网站的吞吐量约为200Mb/s。我认为将时间窗口设置为较大的值会导致内存问题。我应该将每个时间窗口(如 5 分钟(的统计结果存储到数据库中吗?
然后根据数据库查询对最近24小时内生成的日期进行统计? 我没有任何大数据分析的经验。任何建议将不胜感激。
这取决于我们正在谈论的窗口和聚合类型:
-
不使用逐出的窗口:在这种情况下,Flink 只会为每个物理窗口保存一个累积结果。这意味着对于 10 小时的滑动窗口和 1h 的滑动窗口,计算总和,它必须有一个数字 10 次。对于翻转窗口(无论参数如何(,它只保存一次聚合结果。然而,这并不是故事的全部:因为状态是键控的,所以你必须将所有这些乘以分组中使用的字段的每个不同值。
带逐出 的窗口:保存已处理但仍未逐出的所有事件。
简而言之,通常内存消耗与您处理的事件数或窗口的持续时间无关,而是与:
窗口- 的数量(考虑到一个滑动窗口实际上映射到多个物理窗口(。
- 您在分组依据中使用的字段的基数。
考虑到所有因素,我会说一个简单的 24 小时窗口几乎没有内存占用。
您可以在此处查看相关代码。