我正在使用这两个实时数据流框架处理器。我到处都找过了,但找不到这两个框架有什么大的区别。特别是我想知道他们如何工作的基础上的数据大小或拓扑等。
jogvjijk1#
区别主要在于处理数据流的抽象级别。apachestorm的级别稍微低一点,它处理连接在一起的数据源(喷口)和处理器(螺栓),以React方式对单个消息执行转换和聚合。有一个tridentapi,它从这个低级别的消息驱动视图中提取了一点信息,并将其转换为更聚合的查询类结构,这使得集成起来更容易一些(还有一个类似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);
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);
apacheflink有一个更像函数的接口来处理事件。如果您习惯于java8风格的流处理(或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); } });
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>() {
public WordWithCount reduce(WordWithCount a, WordWithCount b) {
return new WordWithCount(a.word, a.count + b.count);
});
当我评估这两个的时候,我选择了flink,只是因为在那个时候,它让我感觉更有文件记录,而且我更容易开始使用它。这场风暴稍微隐晦一些。有一门关于udacity的课程帮助我更好地理解它,但最终Flink还是觉得更适合我的需要。您可能还想在这里看看这个答案,尽管有点老了,所以这两个项目一定是从那时起发展起来的。
1条答案
按热度按时间jogvjijk1#
区别主要在于处理数据流的抽象级别。
apachestorm的级别稍微低一点,它处理连接在一起的数据源(喷口)和处理器(螺栓),以React方式对单个消息执行转换和聚合。
有一个tridentapi,它从这个低级别的消息驱动视图中提取了一点信息,并将其转换为更聚合的查询类结构,这使得集成起来更容易一些(还有一个类似sql的接口用于查询数据流,但它仍然被标记为实验性的。)
根据文件:
apacheflink有一个更像函数的接口来处理事件。如果您习惯于java8风格的流处理(或scala或kotlin等其他函数式语言),这看起来会非常熟悉。它还有一个很好的基于web的监控工具。它的优点是,它有内置的结构,可以按时间窗口等进行聚合(在storm中,您也可以使用trident进行聚合)。
根据文件:
当我评估这两个的时候,我选择了flink,只是因为在那个时候,它让我感觉更有文件记录,而且我更容易开始使用它。这场风暴稍微隐晦一些。有一门关于udacity的课程帮助我更好地理解它,但最终Flink还是觉得更适合我的需要。
您可能还想在这里看看这个答案,尽管有点老了,所以这两个项目一定是从那时起发展起来的。