【问题标题】:Why we require Apache Kafka with NoSQL databases?为什么我们需要带有 NoSQL 数据库的 Apache Kafka?
【发布时间】:2018-07-22 09:56:16
【问题描述】:

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

我认为如果我们需要一个 NoSQL 数据库,我们可以首先在 MongoDB 中从客户端收集数据流,而无需使用 Apache Kafka。但是,大多数大数据架构偏好在数据源和 NoSQL 数据库之间使用 Apache Kafka。(see)

这对实际系统有什么好处?

【问题讨论】:

    标签: mongodb nosql apache-kafka


    【解决方案1】:

    这种架构有几个优点:

    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 用作长期存储系统。使用压缩主题使您可以只存储每个键的最后一个值。因此,您的主题成为您应用的最后一个状态存储。

    【讨论】:

    • 非常感谢您可以理解的回答。 Kafka 作为数据集成总线 非常有用。我得到了 Kafka 作为数据缓冲区。此属性降低了数据丢失的风险。当系统运行时,Apache Kafka 可能会关闭并且数据会丢失。但不幸的是,我仍然不明白为什么我们选择 Kafka 作为长期数据存储。因为,如果我们使用 Apache Kafka 作为长时间的数据存储,我们不需要另一个存储系统。
    • @tolgabuyuktanir 每个存储系统都应该用于它设计的数据(消息数据、文档、关系,你可以命名它)。我的意思是,您可以将 Kafka 用作长期存储,但这完全取决于您的用例。例如,将状态快照从您的应用程序存储到 Kafka 是完全可以的。每次您的应用程序启动时,它都会读取最后一个快照。但是使用 Kafka 来查询数据(例如)是非常低效的。在这种情况下,您可以将数据从 kafka 导出到某个允许查询的系统。
    • 谢谢@leshkin。我明白你说的话,我明白了。感谢您的耐心和解答。
    • 我还要补充一点:5。 Kafka 作为流处理层 您可以在数据流经时使用它来过滤/丰富/聚合数据,从而优化和简化许多设计。
    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2012-05-15
    • 2018-02-07
    • 1970-01-01
    • 2019-06-09
    • 2015-10-23
    相关资源
    最近更新 更多