流处理和传统消息处理之间的基本区别是什么?正如人们所说kafka是流处理的不错选择,但本质上kafka是一个类似于ActivMQ,RabbitMQ等的消息传递框架.
为什么我们通常不会说ActiveMQ也适用于流处理.
是否消费者使用消息的速度决定它是否是流?
在传统的消息处理中,您对消息应用简单计算 - 在大多数情况下,每个消息单独计算.
在流处理中,您可以同时对多个输入流和多个记录(即消息)应用复杂操作(如聚合和连接).
此外,传统的消息传递系统不能"回到过去" - 即,在将消息传递给所有订阅的消费者之后自动删除消息.相比之下,Kafka保留消息,因为它使用基于拉的模型(即,消费者从Kafka中提取数据)一段可配置的时间.这允许消费者多次"倒回"和消费消息 - 或者如果添加新的消费者,它可以读取完整的历史记录.这使得流处理成为可能,因为它允许更复杂的应用程序.此外,流处理不一定是关于实时处理 - 它是关于处理无限输入流(与应用于有限输入的批处理相反).
Kafka提供Kafka Connect和Streams API - 所以它是一个流处理平台,而不仅仅是一个消息/ pub-sub系统(即使它在它的核心中使用它).
基本上Kafka是类似于ActiveMQ或RabbitMQ的消息传递框架.汇流会采取一些努力将Kafka带入流媒体.
https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/
那么为什么Kafka在谈论流处理时会出现?
流处理框架因数据输入而不同.在批处理中,您有一些文件存储在文件系统中,并且您希望继续处理它并存储在某个数据库中.虽然在像Spark,Storm等流处理框架中可以从一些传感器设备获得连续输入,但是在那里使用api feed和kafka来为流引擎提供信息.