Apache Kafka是一种实时消息服务。它以分布式和容错的方式安全地存储数据流。我们可以在生产者时过滤流数据。我不明白为什么我们需要像MongoDB这样的NoSQL数据库来在Apache Kafka中存储相同的数据。真正的问题是为什么我们将相同的数据存储在NoSQL数据库和Apache Kafka中?
我认为如果我们需要NoSQL数据库,我们可以首先从MongoDB中的客户端收集数据流,而无需使用Apache Kafka。但是,大多数大数据架构偏好使用Apache Kafka在数据源和NoSQL数据库之间。(see)
对于真实系统有什么好处?
答案 0 :(得分:6)
这种架构有几个优点:
Kafka作为数据集成总线
它有助于轻松地在多个生产者和许多消费者之间分配数据。 Apache Kafka在这里用作“数据”集成消息总线。
Kafka作为数据缓冲区
将Kafka放在像MongoDB或MySQL这样的“终端”数据存储器前面就像一个自然的数据缓冲区。因此,您可以独立部署/维护/重新部署您的消费者服务。当您的服务停止维护时,Kafka仍然存储所有传入的数据,这非常有用。
Kafka作为短时数据存储
您不必将所有内容存储在Kafka中:您经常使用Kafka主题进行保留。这意味着Kafka会自动删除所有早于某个值的数据。因此,例如,您可能拥有1周保留的Kafka主题(因此您只存储1周的数据),但同时您的数据仍然存在于经典SQL-DB或Cassandra等长时间存储服务中。
< / LI>Kafka作为长期数据存储
另一方面,您可以将Apache Kafka用作长期存储系统。使用压缩主题使您只能存储每个键的最后一个值。因此,您的主题将成为应用的最后一个状态存储。