wso2: cep: siddhi: как сделать временные окна постоянными

в настоящее время мы тестируем сиддхи wso2 cep.

нам нужно иметь возможность перезапустить серверный процесс wso2 без потери данных, которые были накоплены в окне (например, временном окне).

Есть ли способ сделать временные окна постоянными, чтобы сервер можно было перезапустить, не теряя своего состояния?

Нужно ли настраивать сервер для использования постоянства?

Или нам просто нужно адаптировать запрос и использовать таблицу событий?

Вот пример нашего запроса:

from every data= DataInStream[state == 1] -> 
   every event = EventInStream[event.no == data.no] within 24h
       insert into duplicatesOutStream data.id as id

person ron    schedule 03.12.2013    source источник


Ответы (1)


Вы можете заставить CEP сохранять свое состояние, включив моментальные снимки. Документацию можно найти здесь. Но обратите внимание, что это будет сохранять «полное состояние» CEP «периодически» (настраивается в минутах). Поскольку это делается только периодически, вы можете потерять последние несколько событий, которые поступили после последней операции создания моментального снимка. Если вы хотите, чтобы cep восстановился после сбоя, это самый простой вариант.

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

Вместо этого вы также можете использовать таблицы событий. При использовании таблиц событий можно убедиться, что все поступившие события сохраняются. (но одним из недостатков этого подхода является то, что это может привести к снижению производительности по сравнению с подходом Windows + моментальные снимки).

person Rajeev Sampath    schedule 04.12.2013
comment
Мне удалось активировать cassandra и, таким образом, сохранить состояние ведра. Проблема, с которой мы сталкиваемся сейчас, заключается в том, что когда сервер выключается с помощью cntrl-c или при обертывании с помощью yajsw, хуки выключения выполняются параллельно, и cassandra закрывается до того, как состояние сохраняется. Есть ли способ вызвать shutdownGracefully из какого-либо статического метода или через порт выключения (аналогично tomcat)? - person ron; 06.12.2013
comment
Есть два способа корректно завершить работу сервера на основе wso2carbon: 1. из терминала — откройте другой терминал, переключитесь на ‹cep›/bin и выполните команду ./wso2server.sh -stop 2. вы также можете завершить работу из Интернета пользовательский интерфейс (консоль управления) - person Rajeev Sampath; 06.12.2013
comment
Благодарю. чтобы полностью закрыть сервер wso2, я добавил следующее в файл wrapper.conf yajsw: wrapper.app.shutdown.script=${wrapper_home}/scripts/wso2_shutdown.gv скрипт groovy вызывается, когда wso2 получает команду остановки от yajsw. скрипт корректно вызывает shutdown на сервере mbean: import javax.management.* servers = MBeanServerFactory.findMBeanServer(null) beanName = "org.wso2.carbon:type=ServerAdmin" servers.each(){try{new GroovyMBean(it, beanName).shutdownGracefully()} catch (Exception ex){println ex}} - person ron; 06.12.2013
comment
я добавлю этот сценарий и конфигурацию wso2 в образцы следующего выпуска yajsw. - person ron; 09.12.2013