【问题标题】:Apache Kafka vs Apache Storm阿帕奇卡夫卡与阿帕奇风暴
【发布时间】:2014-03-15 12:51:46
【问题描述】:

Apache Kafka:分布式消息传递系统
Apache Storm:实时消息处理

我们如何在实时数据管道中使用这两种技术来处理事件数据?

在实时数据管道方面,在我看来两者的工作相同。我们如何在数据管道上同时使用这两种技术?

【问题讨论】:

    标签: apache-storm apache-kafka data-integration


    【解决方案1】:

    您将 Apache Kafka 用作一个分布式且强大的队列,可以处理大量数据,并使您能够将消息从一个端点传递到另一个端点。

    Storm 不是队列。它是一个具有分布式实时处理能力的系统,这意味着您可以对实时数据并行执行各种操作。

    这些工具的通用流程(据我所知)如下:

    实时系统 --> Kafka --> Storm --> NoSql --> BI(可选)

    因此,您的实时应用程序可以处理大量数据,并将其发送到 Kafka 队列。 Storm 从 kafka 中提取数据并应用一些必要的操作。此时您通常希望从这些数据中获得一些好处,因此您可以将其发送到某个 Nosql 数据库以进行额外的 BI 计算,或者您可以简单地从任何其他系统查询该 NoSql。

    【讨论】:

    • 感谢福哈斯。这很有帮助。一个问题,我们可以使用 Apache Kafka 来聚合 Apache 日志文件,还是我们仍然需要 Flume 来做到这一点?
    • 我想你可以,虽然我不熟悉这样的流程。也许您可以检查 Splunk 是否满足您的需求(只是猜测..)。
    • 我推荐使用 GrayLog 并将其连接到 apache kafka。 GrayLog 已经有了 kakfa 输入插件。
    【解决方案2】:

    Kafka 和 Storm 的目的略有不同:

    Kafka 是一个分布式消息代理,每秒可以处理大量消息。它使用发布-订阅范式并依赖于主题和分区。 Kafka 使用 Zookeeper 在代理之间共享和保存状态。所以Kafka基本上负责将消息从一台机器传输到另一台机器。

    Storm 是一个可扩展、容错的实时分析系统(像 Hadoop 一样实时思考)。它使用来自源(Spouts)的数据并将其传递给管道(Bolts)。您可以在拓扑中组合它们。所以 Storm 基本上是一个计算单元(聚合、机器学习)。


    但是您可以一起使用它们:例如,您的应用程序使用 kafka 将数据发送到其他服务器,这些服务器使用 Storm 对其进行一些计算。

    【讨论】:

      【解决方案3】:

      我知道这是一个较旧的线程,并且 Apache Kafka 和 Storm 的比较在编写时是有效和正确的,但值得注意的是,Apache Kafka 多年来已经发展了很多,自 0.10 版(2016 年 4 月)以来Kafka 包含一个 Kafka Streams API,它提供流处理功能,而无需任何额外的软件,例如 Storm。 Kafka 还包含 Connect API,用于连接到各种数据源和接收器(目的地)。

      公告博客-https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

      当前的 Apache 文档 - https://kafka.apache.org/documentation/streams/

      在 0.11 Kafka 中,流处理功能进一步扩展,以提供 Exactly Once 语义和事务。

      https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/

      【讨论】:

      • 所以现在基本上实时系统直接与 Kafka 作为端点和 Kafka 存储进行通信,例如到数据库?
      • 是的,现在 Kafka 包括 Kafka Connect,用于与数据库和其他数据源(系统日志、JMS、日志文件等)通信,以及 Kafka Streams 来进行流处理(连接、转换、过滤器、聚合) ,然后返回到 Kafka Connect 以写入另一个数据库或存储库。
      【解决方案4】:

      这就是它的工作原理

      Kafka - 提供实时流

      Storm - 对该流执行一些操作

      你可以看看 GitHub 项目https://github.com/abhishekgoel137/kafka-nodejs-d3js

      (D3js 是一个图形表示库)

      理想情况:

      Realtime application -> Kafka -> Storm -> NoSQL -> d3js
      

      此存储库基于:

      Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js
      

      【讨论】:

      • Abhishek,上述答案中提到的链接已损坏。可以更新一下链接吗?
      【解决方案5】:

      正如每个人都向您解释的那样 Apache Kafka:是连续消息队列

      Apache Storm:是连续处理工具

      在这方面,Kafka 将使用 API 从任何网站(如 FB、Twitter)获取数据,并使用 Apache Storm 处理该数据,您可以将处理后的数据存储在您喜欢的任何数据库中。

      https://github.com/miguno/kafka-storm-starter

      只要跟着它,你就会有一些想法

      【讨论】:

        【解决方案6】:

        当我有一个用例需要我对模式进行可视化或提醒时(想想推特趋势),同时继续处理事件,我有几个模式。
        NiFi 将允许我使用非常非常少的自定义编码来处理事件并更新具有低(er)批量聚合的持久数据存储。
        Storm(大量自定义编码)让我几乎可以实时访问趋势事件。
        如果我可以等待几秒钟,那么我可以从 kafka 中批量处理,进入 hdfs (Parquet) 并进行处理。
        如果我需要在几秒钟内知道,我需要 NiFi,甚至可能需要 Storm。 (考虑监控数千个地球站,我需要查看小区域的天气状况以发出龙卷风警告)。

        【讨论】:

          【解决方案7】:

          只需 Kafka 将消息从节点发送到另一个节点,然后 Storm 处理这些消息。查看此示例,了解如何Integration Apache Kafka With Storm

          【讨论】:

            猜你喜欢
            • 2018-07-09
            • 1970-01-01
            • 2014-02-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多