Для простого подсчета слов программы в storm-starter, логика довольно прямо вперед:
1) разделить предложение на слова
2) испускают каждое слово
3) совокупный счетчик (хранить счетчик в карте)Количество слов с помощью шторма или Trident
Однако есть две проблемы:
1) программа использует 12 отдельных потоков для выполнения агрегирования части, что означает, что количество не GLOBAL, мы должны добавить еще один слой получить глобальный счет?
2) в болте карты используются для хранения счета, что означает, что он имеет состояние, а что, если текущий рабочий не работает, все счета, хранящиеся в болте, исчезли? поскольку шторм является апатридом
3) следует ли использовать Trident для этого?
Привет, Джошуа, спасибо за ответ. Я понимаю первый вопрос, что одно и то же слово перейдет в тот же раздел, чтобы достичь глобального подсчета. Во втором вопросе ** «Если карта поддержки в примере была HBase, она была бы устойчивой к сбоям при сбоях, но вы либо потеряли бы данные при перезапуске болта (лучшая обработка усилий), либо над счетными словами, если фраза предложений был воспроизведен (по крайней мере, один раз для обработки) ». ** Вы имеете в виду, что у нас все еще есть потеря данных/превышение количества, даже использование Trident и резервное копирование с помощью HBase? –
Я выяснил, что это зависит от того, какую карту вы используете: транзакционную, не транзакционную и непрозрачную, в основном компромисс между недостатками отказоустойчивости и расходами на хранение. –
Я говорил о регулярном буре в этом случае относительно того, как под/overcounting могло случиться. Непрозрачные и транзакционные состояния Trident обеспечивают ровно один раз подсчет с помощью HBase (или другого постоянного хранилища). То, что вы должны использовать, зависит от того, может ли ваш носик воспроизвести точно такой же набор сообщений, как и раньше, когда происходит сбой. –