Apache Flink - 具有相同值的匹配字段
Apache Flink - Matching Fields with the same value
我们有一个用例,我们需要找到暴力破解的模式,例如从同一设备和同一用户名登录失败 10 次,然后从同一用户名和同一设备成功登录。这应该会在 10 分钟内发生。
假设我们有 10 次登录失败 windows 事件,用户 A 作为用户名,B 作为设备名称,我们从用户 A 使用相同的设备 B 成功登录,我们应该提出一个 alert.Is 有什么方法可以让 flink CEP 满足上述用例。设备和用户名不会事先知道,字段的基数也不知道。
使用 Flink CEP(使用 Java DataStream API),您可以使用 keyBy(event -> new Tuple2<>(event.user, event.device))
之类的东西,然后将模式与该键分区流进行匹配。使用 Flink SQL 的 MATCH_RECOGNIZE,你想要 PARTITION BY user, device
.
时间限制由 WITHIN
子句处理。例如:
PATTERN (F{10} S) WITHIN INTERVAL '10' MINUTE
DEFINE
F.status = 'failure',
S AS S.status = 'success'
我们有一个用例,我们需要找到暴力破解的模式,例如从同一设备和同一用户名登录失败 10 次,然后从同一用户名和同一设备成功登录。这应该会在 10 分钟内发生。
假设我们有 10 次登录失败 windows 事件,用户 A 作为用户名,B 作为设备名称,我们从用户 A 使用相同的设备 B 成功登录,我们应该提出一个 alert.Is 有什么方法可以让 flink CEP 满足上述用例。设备和用户名不会事先知道,字段的基数也不知道。
使用 Flink CEP(使用 Java DataStream API),您可以使用 keyBy(event -> new Tuple2<>(event.user, event.device))
之类的东西,然后将模式与该键分区流进行匹配。使用 Flink SQL 的 MATCH_RECOGNIZE,你想要 PARTITION BY user, device
.
时间限制由 WITHIN
子句处理。例如:
PATTERN (F{10} S) WITHIN INTERVAL '10' MINUTE
DEFINE
F.status = 'failure',
S AS S.status = 'success'