Разница главным образом в уровне абстракции, которую вы имеете при обработке потоков данных.
Apache Storm - немного более низкий уровень, имеющий дело с источниками данных (носиками) и процессорами (болтами), соединенными вместе, для выполнения преобразований и агрегации отдельных сообщений реактивным способом.
Существует 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), это будет выглядеть очень знакомо. Он также имеет хороший веб-инструмент для мониторинга.
Приятно то, что он имеет встроенные конструкции для агрегации по временным окнам и т. Д. (Что в 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);
}
});
Когда я оценивал эти два, я пошел с Флинком просто потому, что в то время это было более хорошо задокументировано, и я начал работать с ним намного легче. Буря была немного более неясной. Существует курс по Udacity , который помог мне понять его гораздо лучше, но в конце Флинк все же чувствовал себя более подходящим для моих нужд.
Возможно, вы также захотите посмотреть на этот ответ здесь , хотя и немного старый, так что оба проекта должны были развиться с тех пор.