Совместное использование состояния между операторами Flink - PullRequest
0 голосов
/ 04 февраля 2019

Этот вопрос уже задавался здесь , но прошло уже два года, и мне интересно, изменилось ли что-нибудь.

У меня есть сценарий использования, в котором я хотел бы поделиться состояниеммежду двумя операторами Flink:

desired stream diagram

  • Поток A - это основной поток, он течет непрерывно
  • Поток B - это простонабор данных обогащения.Он большой (несколько ГБ) и поэтому не может быть использован как широковещательный поток.
  • С потоком B связан связанный с ним оператор (FlatMap, но может быть чем угодно), который действует как загрузчик состоянийи загружает данные обогащения в RocksDB как состояние списка.

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

Наконец, я знаю Я могу просто загрузить все состояние ПОСЛЕ того, как потоки были связаны, используя функцию "co".Просто с точки зрения разработки программного обеспечения разделение обязанностей на класс «загрузчик состояний» и фактический класс «обогащение данных» кажется более чистым, и поэтому я просто хотел бы знать, возможно ли это.

Спасибо.

1 Ответ

0 голосов
/ 04 февраля 2019
  1. На самом деле трудно "просто загрузить все состояние", поскольку вы не можете контролировать порядок загрузки.Обычно вы хотите полностью загрузить данные обогащения перед обработкой любого основного потока (см. FLIP-23 ).
  2. Оставляя это в стороне, я бы не рассматривал его как состояние-loading».По сути, вы кэшируете данные обогащения там, где они необходимы (в функции обогащения).
  3. И, наконец, нет, я не знаю простого, встроенного в Flink способа обмена состояниями между операторами.Очевидно, что вы можете использовать какое-то внешнее хранилище значений ключей, чтобы включить это, но (а) это дополнительная инфраструктура, и (б) оно не будет таким быстрым.
...