使用 Kafka 和 Cassandra 构建实时异常检测实验

异常检测是一种跨行业方法,用于发现事件流中的异常情况 - 它适用于物联网传感器、金融欺诈检测、安全、威胁检测、数字广告欺诈和许多其他应用。此类系统检查流数据以检查是否存在异常或违规行为,并在检测到时发送警报以处理这些异常并确定它们是否确实代表安全威胁或其他问题。

检测系统通过将事件与历史模式进行比较来查找流数据中的异常,识别先前分类的异常和与预期显着不同的新事件。执行此检测需要一个技术堆栈,该技术堆栈利用机器学习、统计分析、算法优化技术和数据层技术来摄取、处理、分析、传播和存储流数据。

实际上,为每天可以生成数百万甚至数十亿个事件的应用程序创建异常检测系统会带来重大的开发挑战,从异常检测算法必须克服的计算障碍到系统数据层技术必须满足的性能和可扩展性需求。在 Instaclustr,我们最近创建了一个纯粹的实验性异常检测应用程序(我们不销售异常检测),利用开源 Apache Kafka 和 Apache Cassandra 作为其数据层技术,然后从可扩展性、性能和性能方面分析了该架构的有效性。成本效益的角度。

构建异常检测管道
断点或变化点分析提供了一种执行简单类型的无监督异常检测的方法。我们的系统使用CUSUM(CUmulative SUM)算法来分析事件流,以检查最近的事件是否与之前的事件不同。

图片标题

异常检测管道流程如下:

图片标题

事件以流的形式到达

从流中获取下一个事件

将事件写入数据库

(数据存储在历史事件数据库中)

从数据库中查询历史数据

如果有足够的观察结果,则运行异常检测器

如果检测到潜在的异常情况,请采取适当的措施

架构和技术决策
Apache Kafka 和Apache Cassandra是支持异常检测系统的强大技术选择,原因有很多:它们价格实惠、高性能、可扩展,并且无缝协作。

Kafka 能够快速、线性扩展地摄取流数据,支持多个异构数据源、数据持久化和复制,即使在某些节点发生故障时也能消除数据丢失。Kafka的存储和转发设计还使其能够充当将易失性外部数据源与Cassandra数据库分开的缓冲区,从而使Cassandra在发生大数据激增时不会不堪重负,并进一步保护数据免遭丢失。将 Kafka 中的数据发送到其他地方(例如 Cassandra 数据库)并实时连续处理流数据很简单。以下是 Kafka 处理负载峰值的示例,允许 Cassandra 继续以稳定的速率处理事件:

图片标题

同时,Cassandra 是快速存储高速流数据,特别是时间序列数据的有力选择,因为它是写入优化的。Cassandra 在重新读取数据的任务中也表现出色,因为它通过使用复杂的主键来支持随机访问查询,该主键由简单或复合分区键以及零个或多个确定数据返回顺序的集群键组成。与 Kafka 一样,Cassandra 也提供线性可扩展性,即使在故障期间也能维护数据。

对于我们的异常检测实验,我们将 Kafka、Cassandra 和我们的应用程序组合在Lambda 架构中,其中 Kafka 和流管道充当“速度层”,Cassandra 充当“​​批处理”和“服务”层。

我们还尝试了使用更简单的 Kappa 架构的想法,利用 Kafka 具有不可变的数据副本来仅将异常检测管道作为 Kafka 流应用程序运行。然而,我们发现 Kafka 仅在连续且按顺序重放先前数据时才有效,因为它缺乏索引或对随机访问查询的支持。这意味着对于大量的 ID,消费者在找到匹配的 ID 之前需要读取大量不相关的记录。不可扩展的替代想法包括为每个 ID 分配一个分区,或者使用流状态存储来缓存数据——考虑到所讨论的大数据无法完整保存在 RAM 中,这是不切实际的。因此,我们证明了 Lambda 架构是必要的,也是最好的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言重点编程题——11-20

目录 ★★★★★11.编一个程序,将磁盘中当前目录下名为“ccwl. txt"的文本文件复制在同一目录下,文k件名改为“ccw2. txt 12.编一个名为countc的函数,要求如下:(1)形式参数: array 存放字符串的字符型数组名(2)功能:统计array数组中大写字母的数目;(3)返回值:字符串中…

web:[NPUCTF2020]ReadlezPHP

题目 打开页面显示如下 没发现其他的线索,查看源代码 发现一个网址,访问这个页面查看 进行代码审计 这段代码是一个简单的 PHP 类,名为 HelloPhp。它有两个公共属性 $a 和 $b,并在构造函数中将它们分别初始化为字符串 "Y-m-…

Java 设计模式之命令模式

命令模式 介绍 命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。 命令模式通过将请求的发送者(客户端&#x…

Failed to load resource: the server responded with a status of 404 ()

路径问题: 路径省略前面的http://localhost:8080/ 就行了。

中兴交换机:DHCP的配置

一、配置说明 拓扑图 S1是中兴三层核心交换机,作为DHCP Server使用,同时作为网关,PC通过自动获取IP地址接入网络 注意事项: S1全局下需要配置:IP Pool,DHCP Policy,打开DHCP功能 S1接口下需…

Leetcode700 二叉搜索树中的搜索

题意理解: 首先明确二叉搜索树的定义: 根节点的值大于左子树所有节点值,小于右子树所有节点值。 二叉搜索树有其自己的顺序,不需要刻意强调遍历顺序。 解题方法: 递归和遍历都可以用。因为是在树里按照一定的规律找一个…

工大智信智能听诊器的演化及其在现代医疗中的角色

听诊器的演化及其在现代医疗中的角色 听诊器发展史传统听诊器发展背景: 1816年,法国医生勒内拉乐内克为了避免直接将耳朵放在病人身上进行听诊,发明了初代听诊器。 从此,在长达200多年的历史当中,传统听诊器几乎都是按…

Springboot实现增删改差

一、包结构 二、各层代码 (1)数据User public class User {private Integer id;private String userName;private String note;public User() {super();}public User(Integer i, String userName, String note) {super();this.id i;this.userName userName;this.note note;…

2.前端--HTML标签基本概念【2023.11.25】

1.基本语法规范 HTML 标签是由尖括号包围的关键词&#xff0c;例如 <html>。HTML 标签通常是成对出现的&#xff0c;例如 和 &#xff0c;我们称为双标签。有些特殊的标签必须是单个标签&#xff08;极少情况&#xff09;&#xff0c;例如 <br />我们称为单标签。 …

大数据-之LibrA数据库系统告警处理(ALM-37012 MPPDBServer实例双机监听SOCKET异常)

告警解释 当操作系统的其它进程占用双机监听端口号时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37012 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名 Ins…

深度学习之基于YoloV3杂草识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在图像识别领域已经取得了显著的成果&#xff0c;其中基于YOLO&#xff08;You Only Look Once&#xff09…

C语言:求二维数组鞍点 。鞍点就是指二维数组中在该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。

分析&#xff1a; 在主函数 main 中&#xff0c;程序首先定义一个二维数组 a[5][5] 和五个整型变量 i、j、max、maxj 和 k&#xff0c;并用于寻找鞍点。然后使用 printf 函数输出提示信息。 接下来&#xff0c;程序使用两个 for 循环结构&#xff0c;从键盘输入一个 5x5 的二…

【华为OD题库-038】支持优先级的对列-java

题目 实现一个支持优先级的队列&#xff0c;高优先级先出队列&#xff0c;同优先级时先进先出。 如果两个输入数据和优先级都相同&#xff0c;则后一个数据不入队列被丢弃。 队列存储的数据内容是一个 整数。 输入描述 一组待存入队列的数据(包含内容和优先级)。 输出描述 队列…

力扣6:N字形变化

代码&#xff1a; class Solution { public:string convert(string s, int numRows){int lens.size();if(numRows1){return s;}int d2*numRows-2;int count0;string ret;//第一行&#xff01;for(int i0;i<len;id){rets[i];}//第k行&#xff01;for(int i1;i<numRows-1;…

自定义递归实现级联组件,可默认展开全部子节点

自定义递归实现级联组件&#xff0c;可默认展开全部子节点 前言 级联组件是各个UI组件库中不可或缺的组件&#xff0c;他们常作为下拉选择使用&#xff0c;可以多选或者单选&#xff0c;但是在最近开发中&#xff0c;这个组件并不能实现产品经理无理的需求&#xff08;需要默…

【云备份】配置加载文件模块

文章目录 配置信息设计配置文件加载cloud.conf配置文件单例模式的使用ReadConfigFile —— 读取配置文件GetInstance —— 创建对象其他函数的实现 具体实现cloud.confconfig.hpp 配置信息设计 使用文件配置加载一些程序运行的关键信息 可以让程序的运行更加灵活 配置信息&am…

C++ 常见异常

关于C异常&#xff08;包括但不限于编译器异常&#xff09;先开个头&#xff0c;有空都记下来吧&#xff1a; 1&#xff1a;_DllMain12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 有效的解决办法&#xff1a; Debug版本&#xff1a; 项目-属性-链接器-输入&#xff1a;忽略特…

爬取极简壁纸

js反编译的代码需要解密之类的&#xff0c;直接给我干蒙圈了&#xff0c;借助selenium可以直接获取到调式工具中的源码&#xff0c;可以获取渲染后的链接&#xff0c;然后将链接交给下载函数&#xff08;使用异步提高效率&#xff09;即可。 后续学习完js反编译的话&#xff0…

matlab导入excel数据两种常见的方法

在MATLAB中导入Excel数据&#xff0c;你可以使用几种不同的方法。下面是两种常见的方法&#xff1a; 方法一&#xff1a;使用readtable函数 readtable函数允许你导入Excel文件中的数据&#xff0c;并将其存储为表格。 % 指定文件路径 filename C:\your\path\to\file.xlsx;%…

羊大师:不同时段喝羊奶,效果会有何不同?

羊大师&#xff1a;不同时段喝羊奶&#xff0c;效果会有何不同&#xff1f; 羊奶是一种营养丰富、口感香浓的健康饮品&#xff0c;被广大消费者所喜爱。然而&#xff0c;你是否知道&#xff0c;不同的喝奶时间对身体的影响也是不同的呢&#xff1f;在不同时段喝羊奶&#xff0…