Stream 流处理和消息处理的区别

Stream 流处理和消息处理的区别,stream,queue,rabbitmq,apache-kafka,messaging,Stream,Queue,Rabbitmq,Apache Kafka,Messaging,流处理和传统消息处理的基本区别是什么?正如人们所说,kafka是流处理的好选择,但本质上,kafka是一个类似于ActivVMQ、RabbitMQ等的消息传递框架 为什么我们通常不说ActiveMQ也适合流处理呢 是消费者消费消息的速度决定了它是否是流吗?基本上,Kafka是与ActiveMQ或RabbitMQ类似的消息传递框架。有一些努力,使卡夫卡朝着流是由汇合 那么,为什么卡夫卡在谈到流处理时会出现 流处理框架不同于数据的输入。在批处理中,您在文件系统中存储了一些文件,并且希望连续处理这些

流处理和传统消息处理的基本区别是什么?正如人们所说,kafka是流处理的好选择,但本质上,kafka是一个类似于ActivVMQ、RabbitMQ等的消息传递框架

为什么我们通常不说ActiveMQ也适合流处理呢


是消费者消费消息的速度决定了它是否是流吗?

基本上,Kafka是与ActiveMQ或RabbitMQ类似的消息传递框架。有一些努力,使卡夫卡朝着流是由汇合

那么,为什么卡夫卡在谈到流处理时会出现


流处理框架不同于数据的输入。在批处理中,您在文件系统中存储了一些文件,并且希望连续处理这些文件并存储在某些数据库中。流内处理框架(如Spark、Storm等)将从一些传感器设备获得连续输入,而api提要和kafka则用于为流引擎提供信息

在传统的消息处理中,您对消息应用简单的计算——在大多数情况下,每个消息单独进行计算

在流处理中,您可以同时对多个输入流和多个记录(即消息)应用复杂操作(如聚合和联接)

此外,传统的消息传递系统无法“回到时间”——也就是说,在消息传递给所有订阅的消费者后,系统会自动删除消息。相反,Kafka使用基于拉取的模型(即,消费者从Kafka中拉出数据)在可配置的时间内保留消息。这允许使用者多次“倒带”和使用消息——或者,如果您添加了一个新的使用者,它可以读取完整的历史记录。这使得流处理成为可能,因为它允许更复杂的应用程序。此外,流处理不一定是实时处理——而是处理无限的输入流(与应用于有限输入的批处理相反)


Kafka提供Kafka Connect和Streams API——因此它是一个流处理平台,而不仅仅是一个消息传递/发布子系统(即使它在其核心中使用它)。

如果您喜欢梳理头发: 消息传递是两个或多个进程或组件之间的通信,而流式传输是在事件发生时传递事件日志。消息携带原始数据,而事件包含有关事件发生和活动(如顺序)的信息。
所以卡夫卡同时做了信息和流媒体。卡夫卡中的主题可以是原始消息或事件日志,通常会保留数小时或数天。事件可以进一步聚合为更复杂的事件。

消息处理意味着对单个消息进行操作和/或使用单个消息。流处理包括对单个消息的操作和/或使用单个消息的操作,以及对流入系统的消息集合的操作。例如,假设交易正在进入支付工具-流处理可用于连续计算每小时平均支出。在这种情况下,可以对流施加一个滑动窗口,该窗口在一小时内拾取消息并计算数量的平均值。这样的数字可以作为欺诈检测系统的输入

尽管Rabbit支持流媒体,但它实际上并不是为它而构建的(参见Rabbit的网站) Rabbit是一个消息代理,Kafka是一个事件流平台

卡夫卡可以处理大量关于兔子的“信息”。 Kafka是一个日志,Rabbit是一个队列,这意味着一旦被使用,Rabbit的消息就不再存在,以备您需要

不过,Rabbit可以指定消息优先级,但Kafka不能


这取决于您的需要。

我想您可能会感兴趣Apache Kafka将自己描述为“分布式流媒体平台”,请参阅。早在2012年,它就开始了,粗略地说,作为一个消息传递系统,但现在它远不止于此。卡夫卡特别配备了自己的流处理引擎,称为卡夫卡的流API(简称卡夫卡流)。您不再需要使用单独的流处理技术,如Storm或Spark,也不再需要使用Spark/Storm/…的许多以前的用户。。。已经开始迁移到Kafka的Streams API以简化和改进其数据架构。此外,输入流可能是无限的,但处理更像是有限输入的滑动窗口。从这个意义上讲,流式处理和批处理之间实际上没有任何区别。批处理只是流处理的一个特例,其中的窗口是强定义的。非常好!不过,有一个想法是,“流媒体”这个词现在可以和“微博客”互换使用(混淆)。一提到滑动窗口,人们就已经在谈论微博客了。严格意义上的流式处理是在记录/事件/事实出现时进行处理。从这个意义上讲,在流式处理中,滑动窗口的大小为1。微批处理限制了您定义窗口边界的方式(即,至少提前一个批处理的跳跃窗口),而在流式处理中,您可以按任意粒度提前窗口。此外,滑动窗口和跳跃窗口之间也有区别(许多系统使用术语“滑动窗口”来实际描述跳跃窗口,这也会导致混淆)。因此,我不明白为什么窗口化意味着微批处理。根据您的参数,您无法在流上进行聚合,这在流处理中肯定是可能的。微批处理更多地是关于何时执行计算,并且(如上所述)将实现细节(即批边界)泄漏到运算符语义中。流处理不能做到这一点。