流处理和传统消息处理之间的基本区别是什么?正如人们所说kafka是流处理的不错选择,但基本上kafka是一个类似于ActivMQ,RabbitMQ等的消息传递框架。
为什么我们一般不会说ActiveMQ也适合流处理。
消费者使用消息的速度是否确定它是否为流?
答案 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