2015-09-16 2 views
1

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

Рассмотрим эту конфигурацию маршрута (псевдокод):

таймера -> идемпотентную (search_splunk_as_batch -> сплит -> SQL (вставка))

Мы хотим периодически запрашивать от Splunk и писать к sql. Мы не хотим пропускать какие-либо сообщения, и мы не хотим дублировать сообщения.

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

ответ

1

Ваш метод вероятно, будет работать до тех пор, как вы можете рассчитывать на некоторые предположения:

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

Если вы можете убедиться, что они будут выполнены, то вы можете просто сохранить максимальную временную метку, что вы получите от поиска и использовать его с параметром «earliest» команды поиска Splunk. Хранение и извлечение максимальной метки времени можно было сделать с помощью чего-то вроде файла, отдельной таблицы базы данных или использования столбца в целевой таблице.

+0

Спасибо, хорошие баллы. Знаете ли вы о любом существующем шаблоне (например, Idempotent Consumer), доступном для такого рода вещей, или мы должны использовать его? – drsquidop