为什么我们需要带有NoSQL数据库的Apache Kafka?

tol*_*nir 3 mongodb nosql apache-kafka

Apache Kafka是一种实时消息传递服务。它以分布式和容错的方式安全地存储数据流。在向生产者发送消息时,我们可以过滤流数据。我并不理解为什么我们需要像MongoDB这样的NoSQL数据库在Apache Kafka中存储相同的数据。真正的问题是,为什么我们将相同的数据存储在NoSQL数据库和Apache Kafka中?

我认为,如果需要NoSQL数据库,则可以首先从MongoDB中的客户端收集数据流,而无需使用Apache Kafka。但是,大多数大数据体系结构偏好在数据源和NoSQL数据库之间使用Apache Kafka。(请参阅参考资料) 还看到

对于实际系统而言,这有什么优势?

cod*_*tsu 8

该体系结构具有以下优点:

  1. Kafka作为数据集成总线

    它有助于在多个生产者和许多消费者之间轻松分发数据。在这里,Apache Kafka充当“数据”集成消息总线。

  2. Kafka作为数据缓冲区

    将Kafka放在MongoDB或MySQL之类的“最终”数据存储之前,就像一个自然的数据缓冲区。因此,您能够独立部署/维护/重新部署消费者服务。在您的服务因维护而停机时,Kafka仍在存储所有传入数据,这非常有用。

  3. Kafka作为短时数据存储

    您不必将所有内容都存储在Kafka中:通常,您会保留使用Kafka主题。这意味着Kafka会自动删除所有早于某个值的数据。因此,例如,您可能具有保留1周的Kafka主题(因此,您仅存储1周的数据),但是同时,您的数据仍处于长期存储服务中,例如经典SQL-DB或Cassandra等。

  4. Kafka作为长期数据存储

    另一方面,您可以将Apache Kafka用作长期存储系统。使用紧凑主题可以使您仅存储每个键的最后一个值。因此,您的主题成为应用程序的最后状态存储。

  • @tolgabuyuktanir 每个存储系统都应该用于它设计的数据(消息数据、文档、关系数据,凡是你能想到的数据)。我的意思是,您可以使用 Kafka 作为长期存储,但这完全取决于您的用例。例如,从应用程序将状态快照存储到 Kafka 是完全可以的。每次您的应用程序启动时,它都会读取最后一个快照。但是使用 Kafka 来查询数据(例如)效率非常低。在这种情况下,您可以将数据从 kafka 导出到某个允许查询的系统。 (2认同)
  • 我还要再加一点:* 5。Kafka作为流处理层*您可以使用它来过滤/丰富/聚合流经的数据,从而优化和简化许多设计。 (2认同)