Как отобразить промежуточные результаты в оконном streaming-etl? - PullRequest
1 голос
/ 22 января 2020

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

В настоящее время мы используем для этого Kafka и Apache Storm (в частности, Trident, т.е. микробатчи). Наша архитектура выглядит примерно так:

enter image description here

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

  1. Код действительно требует значительного обслуживания
  2. Действительно трудно точно выполнить однократную обработку таким способом
  3. Обновление состояния после того, как каждая агрегация, очевидно, влияет на производительность, но она достаточно быстра verbose) стали доступны с тех пор, как мы начали этот проект. Испытывать это казалось похоже на запись в базу данных, особенно mongoDB больше не является современным. Стандартный вариант использования, который я видел, - это внутреннее сохранение состояния в RocksDB или памяти, а затем запись в Kafka после завершения работы окна.

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

Ответы [ 2 ]

2 голосов
/ 22 января 2020

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

  1. Запускайте windows после каждого события, чтобы их результаты постоянно обновлялись
  2. Делайте результаты запрашиваемыми (используя Flink's API запрашиваемого состояния )

Это было предметом конференции Flink Forward. Видео доступно.

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

Также обратите внимание, что вы можете каскадно windows, что означает, что результаты ежечасно windows может быть входом для дневного windows, et c.

1 голос
/ 24 января 2020

Kafka Streams предлагает «Интерактивные запросы». По сути, это то же самое, что и «запрашиваемое состояние» Флинка, однако оно не помечено как «бета», как в Flink.

Фактически, для Kafka Streams ведется работа по обеспечению высокой доступности «Интерактивных запросов», эксплуатирующих «Резервные задачи» Kafka Streams (https://docs.confluent.io/current/streams/architecture.html#fault -Tolrance ).

Для получения более подробной информации, ознакомьтесь со следующими ссылками:

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