Как запускать периодические задачи в топологии Apache Storm? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть топология Apache Storm и я хотел бы время от времени выполнять определенные действия. Я не уверен, как подойти к этому так, чтобы это было естественно и элегантно.

Должно ли это быть Bolt или Spout с использованием ScheduledExecutorService или что-то еще?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Тиковые кортежи - достойный вариант https://kitmenke.com/blog/2014/08/04/tick-tuples-within-storm/

Редактировать: вот необходимый код для вашего болта

@Override
public Map<String, Object> getComponentConfiguration() {
    // configure how often a tick tuple will be sent to our bolt
    Config conf = new Config();
    conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 300);
    return conf;
}

Затем вы можете использовать TupleUtils.isTick(tuple) в execute, чтобы проверить, является ли полученный кортеж тиковым кортежем.

0 голосов
/ 28 июня 2018

Не знаю, правильный ли это подход, но, похоже, он работает нормально: В конце prepare метода Bolt я добавил вызов intiScheduler(), который содержит следующий код:

Calendar calendar = Calendar.getInstance();
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new PeriodicAction() [class implementing Runnable], millisToFullHour(calendar) [wanna start at the top of the hour], 60*60*1000 [run every hour], TimeUnit.MILLISECONDS);

Это нужно использовать с осторожностью, потому что болт может иметь несколько экземпляров в зависимости от вашей настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...