流处理和消息处理之间的区别

时间:2017-01-19 14:39:38

标签: stream queue rabbitmq apache-kafka messaging

流处理和传统消息处理之间的基本区别是什么?正如人们所说kafka是流处理的不错选择,但基本上kafka是一个类似于ActivMQ,RabbitMQ等的消息传递框架。

为什么我们一般不会说ActiveMQ也适合流处理。

消费者使用消息的速度是否确定它是否为流?

6 个答案:

答案 0 :(得分:52)

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

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

此外,传统的消息传递系统无法及时回归" - 即,在将消息传递给所有订阅的消费者之后自动删除消息。相比之下,Kafka保留消息,因为它使用基于拉的模型(即,消费者从Kafka中提取数据)一段可配置的时间。这使消费者可以倒带#34;并多次使用消息 - 或者如果添加新消费者,它可以读取完整的历史记录。这使得流处理成为可能,因为它允许更复杂的应用程序。此外,流处理不一定是关于实时处理 - 它是关于处理无限输入流(与应用于有限输入的批处理相反)。

Kafka提供Kafka Connect和Streams API - 所以它是一个流处理平台,而不仅仅是一个消息/ pub-sub系统(即使它在它的核心中使用它)。

答案 1 :(得分:5)

基本上Kafka是类似于ActiveMQ或RabbitMQ的消息传递框架。汇流会采取一些努力将Kafka带入流媒体。

https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

那么为什么Kafka在谈论流处理时会出现?

流处理框架因数据输入而异。在批处理中,您有一些文件存储在文件系统中,您希望不断处理并存储在某个数据库中。虽然在像Spark,Storm等流处理框架中可以从一些传感器设备获得连续输入,但是在那里使用api feed和kafka来为流引擎提供信息。

答案 2 :(得分:2)

如果您喜欢分开头发: 消息传递是两个或多个进程或组件之间的通信,而流传输是事件日志在发生时的传递。消息携带原始数据,而事件则包含有关订单的发生和活动的信息。 因此,Kafka可以同时进行消息传递和流式传输。 Kafka中的主题可以是原始消息或事件日志,通常可以保留数小时或数天。事件可以进一步汇总为更复杂的事件。

答案 3 :(得分:2)

虽然 Rabbit 支持流式传输,但它实际上并不是为此而构建的(参见 Rabbit 的网站) Rabbit 是消息代理,Kafka 是事件流平台。

Kafka 可以处理大量发给 Rabbit 的“消息”。 Kafka 是一个日志,而 Rabbit 是一个队列,这意味着一旦被消费,Rabbit 的消息就不再存在,以备不时之需。

但是 Rabbit 可以指定消息优先级,而 Kafka 不能。

这取决于您的需求。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

最近遇到一个很好的文档,描述了“流处理”和“消息处理”的用法

https://developer.ibm.com/technologies/messaging/articles/difference-between-events-and-messages/

在上下文中进行异步处理 -

流处理: 当有“处理请求”时考虑它,即客户端向服务器发出请求以进行处理。

消息处理: 在“访问企业数据”时考虑它,即企业内的组件可以发出描述其当前状态的数据。该数据通常不包含其他系统完成操作的直接指令。相反,组件允许其他系统深入了解其数据和状态。

为了便于评估,在为您的解决方案选择合适的技术时,请考虑以下关键选择标准:

事件历史 - 卡夫卡 细粒度订阅 - Kafka 可扩展的消费 - Kafka 事务行为 - MQ