我可以将Flink时间窗口设置为较大的值吗?

时间:2018-07-02 06:42:45

标签: apache-flink

是否可以将DataStream时间窗口设置为较大的值(例如24小时)?要求的原因是,我要基于网站的最新24小时客户端流量进行数据统计。这样,我可以检查是否存在安全违规。

例如,检查用户帐户是否使用多个源IP登录到该网站。或检查最近24小时内某个IP访问了多少个唯一页面。如果检测到安全违规,则会实时执行配置的操作,例如阻止源IP或锁定相关用户帐户。

该网站的吞吐量约为200Mb / s。我认为将时间窗口设置为较大的值会导致内存问题。是否应将每个时间窗口的统计结果(如5分钟)存储到数据库中?
然后根据数据库查询统计最近24小时内生成的日期? 我没有大数据分析的经验。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

这取决于我们在谈论什么类型的窗口和聚合:

  • 不使用逐出的窗口:在这种情况下,Flink将仅在每个物理窗口中保存一个累加结果。这意味着,对于一个10h的滑动窗口和一个1h的滑动窗口,它计算总和时,其数字必须为10倍。对于滚动窗口(无论参数如何),它仅保存一次聚合结果。但这并不是全部内容:因为状态是键控的,所以您必须将所有这些值乘以组中使用的字段的每个不同值。

  • 带驱逐窗口:保存所有已处理但仍未被驱逐的事件。

简而言之,通常,内存消耗与您处理的事件数或窗口的持续时间无关,而是与:

  • 窗口的数量(考虑到一个滑动窗口实际上映射到多个物理窗口)。
  • 您在分组依据中使用的字段的基数。

考虑所有因素,我想说一个简单的24小时窗口几乎没有内存占用。

您可以检查相关代码here