2

Я видел несколько простых примеров агрегации в Интернете. Не могу найти тот, который отвечает на мой вопрос. Мне интересно, сохраняет ли Zookeeper состояние болтов, поэтому, если 1 бит агрегата сработает, тогда, когда он перезапустит рабочего, рабочий начнет с предыдущего состояния. Я использую acks (и, возможно, также выполняю пакетную обработку.)Государственная экономия штормовых болтов, которые выполняют периодическую агрегацию и сохраняют результат agg для db

Например, скажем, что каждую минуту я должен подсчитывать, сколько слов такого же типа я нахожу и храню в db. Мой болт будет держать счетчики для каждой работы и в конце каждой минуты сбрасывать счетчики, хранящиеся в памяти, в db.

например: вход: арахис отличный. Океан замечательный.
Болт состояние после ввода обрабатывается:
в: 2
арахисовое: 1
является: 2
большой: 2
океана: 1

(я надеюсь, что мне не нужно Trident для этого.)
Так что, если болт падает до того, как он зафиксирует счетчики, сохраняет ли Zookeeper это состояние?
Если нет, то у вас есть предложения/ссылки о том, что лучший способ сделать это?

Благодаря

ответ

2

Zookeeper используется для координации узлов в кластере. Я не думаю, что он используется для сохранения внутреннего состояния болтов. К сожалению, я не могу найти ссылку, где это явно указано.

Также вы должны заботиться об общих проблемах при проектировании подобных типов «агрегаторов». Предположим, что болт A обрабатывает слово «The», а B обрабатывает слово «океан». Предположим, что вы носик разбился, просто излучая «Океан большой». Болт «А» получил бы слово «The» и увеличил его, а «B» никогда не получал никакого ввода.

Теперь, когда носик вернулся, и он посылает «Океан большой» снова, болт A не должен перечитывать слово «The». Эта логика должна решаться разработчиком приложения.

Trident заботится об этих ситуациях, используя идентификаторы транзакций. Стоит взглянуть на него.

Пожалуйста, посмотрите на эти вики -

  1. https://github.com/nathanmarz/storm/wiki/Trident-state

  2. https://github.com/nathanmarz/storm/wiki/Transactional-topologies

вы получите некоторое представление о том, как проектировать топологию.

+0

Я решил пойти с Трезубцем. Я также попытаюсь использовать только acks (нет Trident) и посмотреть, что лучше всего работает с трафиком, который я получаю. Благодаря! – Adrian

+0

Вы правы. Zookeeper только отслеживает, какие кортежи активно работают кластером Storm, а не их состояние внутри кластера. –