Kafka+Flink 实现准实时异常检测系统

1.背景介绍
异常检测可以定义为“基于行动者(人或机器)的行为是否正常作出决策”,这项技术可以应用于非常多的行业中,比如金融场景中做交易检测、贷款检测;工业场景中做生产线预警;安防场景做***检测等等。

根据业务要求的不同,流计算在其中扮演着不同的角色:既可以做在线的欺诈检测,也可以做决策后近实时的结果分析、全局预警与规则调整等。

本文先介绍一种准实时的异常检测系统。

所谓准实时,即要求延迟在100ms以内。比如一家银行要做一个实时的交易检测,判断每笔交易是否是正常交易:如果用户的用户名和密码被盗取,系统能够在盗取者发起交易的瞬间检测到风险来决定是否冻结这笔交易。

这种场景对实时性的要求非常高,否则会阻碍用户正常交易,所以叫做准实时系统。

由于行动者可能会根据系统的结果进行调整,所以规则也会更新,流计算和离线的处理用来研究规则是否需要更新以及规则如何更新。

2.系统架构与模块综述
为了解决这个问题,我们设计如下的系统架构:

在线系统,完成在线检测功能,可以是web服务的形式:
针对单条事件进行检测
根据全局上下文进行检测,比如全局黑名单
根据用户画像或近期一段时间的信息进行检测,比如最近20次交易时间与地点
kafka,把事件与检测的结果及其原因发送到下游
flink近实时处理
近实时的更新用户的属性,比如最近的交易时间&地点;

汇总统计全局的检测状态,并做同期对比,比如某条规则的拦截率突然发生较大变化、全局通过率突然增高或降低等等;

maxcompute/hadoop存储与离线分析,用于保留历史记录,并由业务人员探索性的研究有没有新的模式hbase,保存用户画像

3.关键模块
3.1 在线检测系统

交易的异常检测在本系统中实现,他可以是一个web服务器,也可以是嵌入到客户端的系统。在本文中,我们假设它是一个web服务器,其主要任务就是检阅到来的事件并反馈同意或拒绝。

针对每一个进入的事件,可以进行三个层次的检测:

事件级检测
只用该事件本身就能完成检测,比如格式判断或基本规则验证(a属性必须大于10小于30,b属性不能为空等等)
全局上下文检测
在全局信息中的上下文中,比如存在一个全局的黑名单,判断该用户是否在黑名单中。或者某属性大于或小雨全局的平
均值等。

画像内容检测

针对该行动者本身的跨多条记录分析,比如该用户前100次交易都发生在杭州,而本次交易发生在北京且距上次交易只有10分钟,那就有理由发出异常信号。

所以这个系统至少要保存三方面的东西,一方面是整个检测的过程,一方面是进行判断的规则,一方面是所需的全局数据,除此之外,根据需要决定是否把用户画像在本地做缓存。

3.2 kafka

kafka主要用来把检测的事件、检测的结果、拒绝或通过的原因等数据发送到下游,供流计算和离线计算进行处理。

3.3 flink近实时处理

在上面的系统中已经完成了异常检测,并把决策发送到了kafka,接下来我们需要使用这些数据针对当前的策略进行新一轮的防御性检测。

即使已知的作弊行为已经输入到模型和规则库中进行了标记,但总有“聪明人”尝试欺诈。他们会学习现在的系统,猜测规则并作出调整,这些新的行为很可能超出了我们当前的理解。所以我们需要一种系统来检测整体系统的异常,发现新的规则。

也就说,我们的目标不是检测单个事件是否有问题,而是要检测这些用来检测事件的逻辑本身有没有问题,

所以一定要站在比事件更高的层面来看问题,如果在更高的层面发生变化,那么有理由考虑对规则/逻辑进行调整。

具体来说,系统应该关注一些宏观指标,比如总量,平均值,某个群体的行为等等。这些指标发生了变化往往表示某些规则已经失效。

举几个例子:

某条规则之前的拦截率是20%,突然降低到了5%;

某天规则上线后,大量的正常用户均被拦截掉了;

某个人在电子产品上的花费突然增长了100倍,但同时其他人也有很多类似的行为,这可能具有某种说得通的解释(比如Iphone上市);

某人连续几次行为,单次都正常,但不应该有这么多次,比如一天内连续买了100次同一产品【开窗分析】;

识别某种组合多条正常行为的组合,这种组合是异常的,比如用户买菜刀是正常的,买车票是正常的,买绳子也是正常的,去加油站加油也是正常的,但短时间内同时做这些事情就不是正常的。通过全局分析能够发现这种行为的模式。

业务人员根据流计算产生的近实时结果能够及时发现规则有没有问题,进而对规则作出调整。

除此之外,流计算还能进行用户画像的实时更新更新,比如统计用户过去10分钟的几次行为,最近10次的登陆地点等等。

3.4 maxcompute/hadoop离线存储于探索性分析

在这个环节中,可以通过脚本、sql、或机器学习算法来进行探索性分析,发现新的模型,比如通过聚类算

法把用户进行聚类、对行为打标后进行模型的训练等等,或者周期性的重新计算用户画像。这里和业务关系很大,不多过多描述。

3.5 hbase用户画像

hbase保存着流计算&离线计算产生的用户画像,供检测系统使用。之所以选择hbase主要是为了满足实时查询的需求。

4.总结
上面给出了一个准实时异常检测系统的概念性设计,业务逻辑虽然简单,但整个系统本身是非常完整且具有良好扩展性的,所以可以在这个基础上进一步去完善。
欢迎工作一到五年的Java工程师朋友们加入Java架构开发: 855835163
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

原文地址:http://blog.51cto.com/14028890/2311703

时间: 2024-11-08 01:00:20

Kafka+Flink 实现准实时异常检测系统的相关文章

如何开发一个异常检测系统:如何评价一个异常检测算法

利用数值来评价一个异常检测算法的重要性 使用实数评价法很重要,当你用某个算法来开发一个具体的机器学习应用时,你常常需要做出很多决定,如选择什么样的特征等等,如果你能找到如何来评价算法,直接返回一个实数来告诉你算法的好坏,那样你做决定就会更容易一些.如现在有一个特征,要不要将这个特征考虑进来?如果你带上这个特征运行你的算法,再去掉这个特征运行你的算法,得到返回的实数,这个实数直接告诉你加上这个特征算法是变好了还是变坏了,这样你就有一种更简单的算法来确定是否要加上这个特征. 为了更快地开发出一个异常

flume + kafka + sparkStreaming + HDFS 构建实时日志分析系统

一.Hadoop配置安装 注意:apache提供的hadoop-2.6.0的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库, 所以如果在64位的操作上安装hadoop-2.4.1就需要重新在64操作系统上重新编译 1.修改Linux主机名 2.修改IP 3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/hosts里面要配置的是内网IP地址和主机名的映射关系 4.关闭防火墙 5.s

携程实时智能检测平台建设实践

一.背景介绍 1.规则告警带来的问题 大部分监控平台是基于规则告警实现监控指标的预警.规则告警一般基于统计学,如某个指标同比.环比连续上升或下降到一定阈值进行告警.规则告警需要用户较为熟悉业务指标的形态,从而才能较为准确的配置告警阈值,这样带来的问题是配置规则告警非常繁琐.告警效果也比较差,需要大量人力物力来维护规则告警.当一个告警产生时,也需要耗费许多人力验证告警是否正确并确认是否需要重新调整阈值.在携程,规则告警还涉及了其它问题,比如携程光公司级别的监控平台就有三个,每个业务部门还会根据自己

斯坦福第十五课:异常检测(Anomaly Detection)

15.1  问题的动机 15.2  高斯分布 15.3  算法 15.4  开发和评价一个异常检测系统 15.5  异常检测与监督学习对比 15.6  选择特征 15.7  多元高斯分布(可选) 15.8  使用多元高斯分布进行异常检测(可选) 15.1  问题的动机 15.2  高斯分布 15.3  算法 15.4  开发和评价一个异常检测系统 15.5  异常检测与监督学习对比 15.6  选择特征 15.7  多元高斯分布(可选) 15.8 使用多元高斯分布进行异常检测(可选)

Ng第十五课:异常检测(Anomaly Detection)

15.1  问题的动机 15.2  高斯分布 15.3  算法 15.4  开发和评价一个异常检测系统 15.5  异常检测与监督学习对比 15.6  选择特征 15.7  多元高斯分布(可选) 15.8  使用多元高斯分布进行异常检测(可选) 15.1  问题的动机 15.2  高斯分布 15.3  算法 15.4  开发和评价一个异常检测系统 15.5  异常检测与监督学习对比 15.6  选择特征 15.7  多元高斯分布(可选) 15.8 使用多元高斯分布进行异常检测(可选)

Machine Learning - XV. Anomaly Detection异常检测(Week 9)

http://blog.csdn.net/pipisorry/article/details/44783647 机器学习Machine Learning - Andrew NG courses学习笔记 Anomaly Detection异常检测 Problem Motivation问题的动机 Anomaly detection example Applycation of anomaly detection Note:for Frauddetection: users behavior exam

斯坦福机器学习视频笔记 Week9 异常检测和高斯混合模型 Anomaly Detection

异常检测,广泛用于欺诈检测(例如"此信用卡被盗?"). 给定大量的数据点,我们有时可能想要找出哪些与平均值有显着差异. 例如,在制造中,我们可能想要检测缺陷或异常. 我们展示了如何使用高斯分布来建模数据集,以及如何将模型用于异常检测. 我们还将涵盖推荐系统,这些系统由亚马逊,Netflix和苹果等公司用于向其用户推荐产品. 推荐系统查看不同用户和不同产品之间的活动模式以产生这些建议. 在这些课程中,我们介绍推荐算法,如协同过滤算法和低秩矩阵分解. Problem Motivation

Andrew Ng-ML-第十六章-异常检测

1.问题动机 图1.飞机发动机检测例子 对飞机引擎的例子,如果选取了两个特征x1热量产生度,x2震动强度.并得到如下的图,如果有一个新的引擎来检测其是否正常,x_test,那么此时如果点落在和其他点正常内,那么就显示是正常,不需要进一步的检测,但是如果在右下角绿色的,那么就是异常的,需要进一步地检测. 图1.密度检测 更一般地建立模型,当x_test输入时,若概率<阈值ε,那么就被设置为异常:否则设置为正常.如图来看,中心部分的概率大,四周部分概率小. 图2.异常检测的应用 异常检测最常见的应用

基于系统调用的系统异常检测的可用数据集总结

因为我主要研究的是通过监控系统调用进而判断系统是否异常,所以最近在整理关于系统异常检测可用的数据集.目前搜集到的数据集主要有UNM,ADFA等. (一)UNM Dataset UNM数据集是新墨西哥大学为了研究入侵免疫系统而采集的数据集.该网站的主页是这样的: 下载的地址是:https://www.cs.unm.edu/~immsec/systemcalls.htm UNM数据集主要包含在活跃进程下系统调用的若干数据集. 这些进程主要包括守护进程以及那些不是守护进程的应用进程(这些应用程序在大小