Apache Flink - 匹配具有相同值的字段

Posted

技术标签:

【中文标题】Apache Flink - 匹配具有相同值的字段【英文标题】:Apache Flink - Matching Fields with the same value 【发布时间】:2021-10-27 10:59:47 【问题描述】:

我们有一个用例,我们需要找到暴力破解模式,例如从同一设备和同一用户名登录 10 次失败,然后从同一用户名和同一设备成功登录。这应该在 10 分钟内完成。

假设我们有 10 个登录失败的 Windows 事件,用户 A 作为用户名,B 作为设备名,并且我们从用户 A 使用相同的设备 B 成功登录,我们应该发出警报。有没有办法将 CEP 链接到满足上述用例。设备和用户名事先不知道,字段的基数也不知道。

【问题讨论】:

【参考方案1】:

使用 Flink CEP(使用 Java DataStream API),您可以使用 keyBy(event -> new Tuple2<>(event.user, event.device)) 之类的东西,然后将模式与该密钥分区流进行匹配。使用 Flink SQL 的 MATCH_RECOGNIZE,你想PARTITION BY user, device

时间限制由WITHIN 子句处理。例如:

PATTERN (F10 S) WITHIN INTERVAL '10' MINUTE
DEFINE
  F.status = 'failure',
  S AS S.status = 'success'

【讨论】:

感谢答案正是我想要的 很高兴它有帮助。顺便说一句,我已经清理了这个例子。 如果您能接受答案,我将不胜感激。

以上是关于Apache Flink - 匹配具有相同值的字段的主要内容,如果未能解决你的问题,请参考以下文章

聚合具有相同字段值的查询项

如何从两个表中选择同一字段中具有相同值的行?

Django:如何选择具有相同字段值的对象?

MySQL更新列的序列号按具有相同值的字段分组

根据另一列的字段值选择具有相同列值的行

在猫鼬中匹配具有字符串值的数组?