apache-flink - 欺诈检测 DataStream API 教程问题
问题描述
我正在关注这里的教程。
Q1 : 为什么在最终的应用程序中,flagState = true
无论当前交易量如何,我们都会清除所有状态并删除计时器?我参考这部分代码:
// Check if the flag is set
if (lastTransactionWasSmall != null) {
if (transaction.getAmount() > LARGE_AMOUNT) {
//Output an alert downstream
Alert alert = new Alert();
alert.setId(transaction.getAccountId());
collector.collect(alert);
}
// Clean up our state [WHY HERE?]
cleanUp(context);
}
如果事务的数据流是0.5, 10, 600
,那么flagState
将设置为0.5
然后清除为10
。所以对于600
,我们跳过上面的代码块并且不检查大量。但如果交易在一分钟内发生0.5
,600
我们应该发送警报,但我们没有。
Q2:为什么我们用处理时间来判断两个交易是否相隔1分钟?事务类有一个timeStamp
字段,所以使用事件时间不是更好吗?由于处理时间会受到应用程序速度的影响,因此两个事件时间在 1 分钟内的事务可能会因延迟而间隔 > 1 分钟处理。
解决方案
推荐阅读
- shiny - 如何在闪亮仪表板的信息框中同时显示描述和图标的副标题
- algorithm - 在链表中查找循环的开始
- c# - 用户有 5 次尝试猜测 1 到 100 之间的数字的控制台应用程序
- python - PyGame - 带有 ps3 控制器的 RaspberryPi 3b+
- javascript - 使用引导表单验证时 window.location 不起作用
- javascript - 如何在spring boot java代码中按日期获取用户数据
- c# - 使用 C# 在 Xpath 中查询元素
- python - 从元组列表中创建一个 DataFrame
- r - quantmod 函数中的 fix.by(by.y, y) 错误
- javascript - 调用 DynamoDB 查询然后将结果写入 s3 存储桶:如何使用异步等待简化此代码?