Apache Ignite与Apache Storm(深入比较)

6

Apache Ignite和Apache Storm在许多方面都是截然不同的技术。特别是因为Storm有一个非常特定的用例,而Ignite则集成了相当多的工具。据我所知,Ignite的核心是其内存存储。在此基础上构建了数据局部性敏感计算,并支持各种酷炫的"玩具"。我感兴趣的是流式功能,它基本上是一个查询监听器,监控内存缓存中的更改。

如果我将滑动窗口设置为一个元组,那么Ignite像Storm一样会提供一次处理一个元组的功能,数据会被Ignite存储在内存中。Storm并没有在内存中“存储”数据,但元组也当然存储在内存中。因此,在这两种情况下都可以进行流式处理,数据存储在内存中,且可以分布式计算。

我觉得,在Storm中编写多步数据转换程序可能会更容易些,因为两种技术都有抽象化。对此有何看法?

第二个问题:性能如何?我猜Ignite的数据局部性可能会给它带来优势。另一方面,我认为Storm可能更适合于多步骤的分布式计算(不同机器上的不同bolts),而Ignite程序可能不太容易拆分。

如果我仍然想要分发流(不仅是按数据,还有步骤在不同的机器上)。那么我想我必须编写多个Ignite流处理器,并通过缓存进行通信,对吗?这听起来比在Storm中编写要困难得多(这又回到了第一个问题)。

1个回答

3
我感觉在数据转换的多个步骤中编写程序可能更容易在Storm中完成,由于两种技术的抽象。对此有何看法?
你的想法可能是正确的。似乎在Storm中进行多次转换会更容易,尽管Ignite通过将新生成的元组流式传输到另一个缓存中也对其提供了良好的支持。
那性能呢?我猜Ignite的数据本地性可能会给它带来优势。另一方面,我认为Storm中多个步骤可能更好地分布(不同的机器上有不同的bolt),而Ignite程序可能不容易被轻易拆分。
从社区内部所听到的,Ignite应该比Storm快一个数量级。
如果我仍然想分发流(不仅是每个数据,而且是不同机器上的步骤)。我猜我需要编写多个Ignite流,这些流通过缓存进行通信,对吗?
是的,你是正确的。在Ignite中拥有多个缓存并不是坏事,实际上是建议这样做的。大多数用户最终会拥有十几个或二十个缓存。
这听起来比在Storm中更难写(让我们回到第一个问题)。
听起来你需要决定性能对你来说有多重要。

1
  1. 请问您能指出在哪里找到关于“良好支持”的信息吗?
  2. Ignite为什么比Storm快那么多?我真的没有看到任何技术原因。(这有点难以置信。)
- Make42
“体面的支持”指的是您所建议的确切方式 - 将一个流的结果流式传输到另一个缓存中。 - Dmitriy
1
就性能而言,最好自己进行测试。性能差异通常来自代码效率,而不一定来自架构。 - Dmitriy
关于第一点:我的意思是我应该使用哪个Ignite接口。是org.apache.ignite.IgniteCache还是有更方便的接口适用于这种情况? - Make42
2
Ignite有单独的流API,可以更好地适应您的用例。请查看IgniteDataStreamer和StreamReceiver接口。这是有关更多详细信息的文档页面:https://apacheignite.readme.io/docs/streaming--cep - Valentin Kulichenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接