Apache Storm和Flink的区别

3

我正在使用这两个实时数据流框架处理器。我已经到处搜索,但是我找不到这两个框架之间的大差异。特别是我想知道它们如何基于数据大小或拓扑结构进行工作。


1
这似乎是 https://dev59.com/CrPma4cB1Zd3GeqPtqI5 的重复。 - Fabian Hueske
我不理解你的评论。 - Marco Domenicano
你的问题不是我链接的那个问题的重复吗(“Flink和Storm之间的主要区别是什么?”)?如果不是,最好重新表述问题标题以指出区别。 - Fabian Hueske
@FabianHueske 我猜你把链接搞混了。这个似乎是重复的: https://dev59.com/310a5IYBdhLWcg3wHlek#30719138 - TobiSH
1
确切地说,@TobiSH,我不理解Fabian的帖子,因为它链接到我的帖子。我的问题有点不同,你可以从jbx的回答中看出这些区别。此外,另一个问题已经3年前了,答案可能会有所不同。 - Marco Domenicano
显示剩余2条评论
1个回答

2
主要区别在于你对处理数据流的抽象层级。Apache Storm 更低级一些,处理数据源(Spouts)和处理器(Bolts),将它们连接起来以响应方式对单个消息进行转换和聚合。有一个Trident API,它从这种低级的消息驱动视图中抽象出来,变成更聚合的查询构造,这使得集成变得更容易一些。(还有一个类似 SQL 的接口用于查询数据流,但仍标记为实验性。)从文档中可以看到:
TridentState wordCounts =
     topology.newStream("spout1", spout)
       .each(new Fields("sentence"), new Split(), new Fields("word"))
       .groupBy(new Fields("word"))
       .persistentAggregate(new MemoryMapState.Factory(), new Count(), new Fields("count"))                
       .parallelismHint(6);

Apache Flink具有更类似函数式的界面来处理事件。如果您习惯于Java 8风格的流处理(或其他函数式语言,如Scala或Kotlin),这将非常熟悉。它还有一个漂亮的基于Web的监控工具。 它的好处在于它具有内置的按时间窗口等聚合构造(在Storm中,您可能也可以使用Trident实现)。
来自文档:
 DataStream<WordWithCount> windowCounts = text
            .flatMap(new FlatMapFunction<String, WordWithCount>() {
                @Override
                public void flatMap(String value, Collector<WordWithCount> out) {
                    for (String word : value.split("\\s")) {
                        out.collect(new WordWithCount(word, 1L));
                    }
                }
            })
            .keyBy("word")
            .timeWindow(Time.seconds(5), Time.seconds(1))
            .reduce(new ReduceFunction<WordWithCount>() {
                @Override
                public WordWithCount reduce(WordWithCount a, WordWithCount b) {
                    return new WordWithCount(a.word, a.count + b.count);
                }
            });

当我在评估这两个框架时,我选择了Flink,仅仅因为那时它的文档更加完善,我也更容易上手。Storm稍微有些晦涩。虽然有一门Udacity的课程帮助我更好地理解它,但最终我还是认为Flink更适合我的需求。
你也可以看看这个回答,尽管它有点老旧,所以这两个项目都可能已经发生了变化。

谢谢您的回答。我正在撰写我的硕士论文,需要分析这两个框架并比较它们上面的应用程序,因此我正在寻找可以进行比较的一个。您能否向我解释一下集群大小之间的差异?您知道我可以使用的实时流吗?谢谢。 - Marco Domenicano
按簇的大小,您是指可以拥有多少节点?对于可扩展性属性不确定,我想最好的方法是在两者上构建相同的应用程序,并使用相同的硬件对它们进行基准测试。您可以查看Twitter关键字的订阅,以及他们的API,或者聚合股票价格变化,或者加密货币价格变化(这些交易所的API通常非常好,因为它们被机器人使用)。您可以计算所有移动平均线和指标,作为实时数据聚合的展示。 - jbx

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