Привязка кортежа Storm Esper Bolt

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

В самом Esper Bolt есть обратный вызов:

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

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

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

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


person Mike Chinaloy    schedule 22.05.2014    source источник


Ответы (1)


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

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

person user650839    schedule 22.05.2014
comment
Я пошел на ваше второе предложение в конце. Когда мой EsperBolt отправляет событие в движок Esper, я добавляю кортеж в очередь. Когда Esper позже выдает результат, я опрашиваю ту же очередь и извлекаю исходный кортеж. Затем я могу использовать этот кортеж для завершения дерева кортежей. - person Mike Chinaloy; 28.05.2014