Apache Storm和Flink之间的区别



我正在使用这两个实时数据流框架处理器。我到处搜索,但我找不到这两个框架之间的巨大区别。特别是我想知道它们是如何根据数据或拓扑等的工作来工作的。

差异主要是在处理数据流的抽象水平上。

Apache Storm是更低的水平,处理数据源(喷头(和连接的处理器(螺栓(以反应性的方式对单个消息进行转换和聚集。

有一个三叉戟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的监视工具。关于它的好处是,它具有内置的构造,用于按时间窗口等组合。

来自文档:

 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一起去了,仅仅是因为当时感觉更加有记录,我开始更轻松地开始。风暴稍微晦涩难懂。有一门关于Udacity的课程可以帮助我了解更多,但最终Flink仍然更适合我的需求。

您可能还想在这里查看此答案,尽管有点旧

相关内容

  • 没有找到相关文章

最新更新