больших батчей и локальности данных • Отказоустойчивый Минусы • Все пишется на диск • Слишком низкоуровневый • Невозможность итеративных алгоритмов • Невозможность потоковой обработки
= [...] } on_send { @sentences.sample } end class SplitSentence < RedStorm::DSL::Bolt on_receive do |sentence,| sentence.split.map {|word| [word] } end end
bolt SplitSentenceBolt do output_fields :word source RandomSentence end bolt WordCountBolt, parallelism: 2 do output_fields :word, :count source SplitSentenceBolt, fields: ['word'] end configure :word_count do num_workers 4 end end
разных платформ • Не хотим поддерживать две полностью разных платформы • Не хотим пересчитывать все данные, если код остался неизменным или незначительно изменился.
— возможность стримить не только новые значения, но и откатывать предыдущие • Интеграция с хранилищем — exactly-once семантика, эффективность через колокацию данных (отсутствие распределенных локов и сетевого оверхеда ), отказоустойчивость через репликацию
end request_flow('session_create' => :prepare_session) .match_time timeline(:logins), after: true do |session, user| session.merge user_id: user[:user_id] end