Apache Ignite 与 Apache Storm(深入)
Posted
技术标签:
【中文标题】Apache Ignite 与 Apache Storm(深入)【英文标题】:Apache Ignite vs. Apache Storm (in-depth) 【发布时间】:2016-02-29 10:18:03 【问题描述】:Apache Ignite 和 Apache Storm 在许多方面是两种截然不同的技术 - 特别是因为 Storm 有一个非常具体的用例,而 Ignite 在一个屋檐下拥有相当多的工具集。据我了解,Ignite 的核心是它的内存存储。建立在此之上的是其对数据局部性敏感的计算。建立在上面的是各种很酷的“玩具”。我感兴趣的是 Streaming 功能,它基本上是一个查询不断变化的内存缓存的侦听器。
如果我将滑动窗口设置为一个元组,Ignite 会像 Storm 一样提供一次一个元组的功能。数据由 Ignite 存储在内存中。 Storm 不会在内存中“存储”数据,但元组当然也存储在内存中。因此,在这两种情况下,我都有流式传输,并且我在内存中有数据,我能够分发我的计算。
我感觉编写执行许多数据转换步骤的程序可能更容易在 Storm 中编写,因为这两种技术都是抽象的。这有什么好说的?
第二个问题:性能怎么样?我猜想 Ignite 的数据本地化可能会给它带来优势。另一方面,我认为多个步骤可能更好地分布在 Storm 中(各种机器上的不同螺栓),而 Ignite 程序可能不会那么容易拆分。
如果我仍然想分发流(不仅是每个数据,还包括不同机器上的步骤)。我想我必须编写多个 Ignite 流媒体,它们通过缓存进行通信,对吧?这听起来比在 Storm 中更难写(让我们回到第一个问题)。
【问题讨论】:
【参考方案1】:我感觉编写执行许多数据转换步骤的程序可能更容易在 Storm 中编写,因为这两种技术都是抽象的。这有什么好说的?
你可能是对的。尽管 Ignite 也通过将新生成的元组流式传输到另一个缓存中来提供对它的良好支持,但似乎在风暴中多次转换会更容易。
性能怎么样?我猜想 Ignite 的数据本地化可能会给它带来优势。另一方面,我认为多个步骤可能更好地分布在 Storm 中(各种机器上的不同螺栓),而 Ignite 程序可能不会那么容易拆分。
据我在社区中听到的消息,Ignite 应该比 Storm 快一个数量级。
如果我仍然想分发流(不仅是每个数据,还包括不同机器上的步骤)。我想我必须编写多个通过缓存进行通信的 Ignite 流媒体,对吧?
是的,你是对的。在 Ignite 中拥有多个缓存并不是一件坏事,实际上是推荐的。大多数用户最终拥有一打或两个。
这听起来比在 Storm 中更难写(让我们回到第一个问题)。
听起来你需要决定性能对你有多重要。
【讨论】:
1) 您能否指出在哪里可以找到有关这种“体面支持”的信息? 2) 为什么 Ignite 会比 Storm 快几个数量级?我真的没有看到任何技术原因。 (这有点难以置信。) 我所说的“体面支持”正是您所建议的 - 将一个流的结果流式传输到另一个缓存中。 至于性能,请自行测试。性能差异通常来自代码效率,而不一定来自架构。 关于 1:我的意思是我应该使用哪个 Ignite 接口。 org.apache.ignite.IgniteCache 或者对于这个用例是否有更方便的? Ignite 有单独的流 API,应该更适合您的用例。看看 IgniteDataStreamer 和 StreamReceiver 接口。以下是更多详细信息的文档页面:apacheignite.readme.io/docs/streaming--cep以上是关于Apache Ignite 与 Apache Storm(深入)的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark 与 Apache Ignite [关闭]
Apache Zeppelin 与 Ignite 集成时出现“无法启动 Ignite 节点”错误