Крепление Storm Esper Bolt Tuple

1

В настоящее время у меня установлена топология, в которой используется Эспер Болт, созданный tomdz на GitHub. Кажется, что все работает нормально, за исключением случаев, когда речь идет о привязке кортежа.

В самом цилиндре Esper есть обратный вызов:

public void update(EventBean[] newEvents, EventBean[] oldEvents, EPStatement statement, EPServiceProvider epServiceProvider)

Проблема здесь в том, что у меня нет ссылки на предыдущий кортеж в дереве кортежей. Это означает, что когда я иду, чтобы испустить свой результат Эспера в следующий Болт в последовательности, я не могу предоставить кортеж для привязки:

collector.emit(new Values(eventName, eventGrouping, eventDescription, correlatedValues));

Интересно, кто-нибудь столкнулся с этой проблемой в своем собственном проекте? Если да, то как вы обошли это? Я хочу использовать привязку для обеспечения надежности сообщений во всей топологии.

Теги:
apache-storm
esper

1 ответ

1
Лучший ответ

Один из вариантов - привязать кортеж Storm к входному событию Esper в качестве свойства и убедиться, что Esper EPL выбирает свойство либо "select *", либо "select originaltuple". Затем слушатель может использовать это.

Другой вариант - отслеживать это за пределами Esper, используя какой-либо идентификатор события, который у вас может быть. Или используйте идентификатор входного события через идентификатор hashmap, отображающий входное событие в кортеж. Затем слушателю необходимо выполнить некоторый поиск на основе входного события Esper, который является той же ссылкой, что и Esper, также доставляет слушателю и удаляет.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню