Какой бэкэнд использует Flink Table API? Требуется ли реляционная БД?

Я новичок во Flink и пытаюсь понять подходящие варианты использования, в которых можно использовать Stream API/ Table API. Как часть этого пытается понять

  1. Как и Stream API, есть ли у Table API гибкость для выбора типа серверной части состояния, которую он может использовать?
  2. Каковы все доступные серверные части для Table API, требуются ли для этого какие-либо внешние хранилища данных, такие как My SQL? или любое другое хранилище данных?

Короче говоря, пытаемся понять, как работает бэкэнд, используемый Table API.

1 ответ

По сути, Flink не может быть хорошим долгосрочным постоянным магазином. Это больше похоже на систему обработки. Вы хотите, чтобы ваше долгосрочное постоянное состояние было в MySQL/Kafka/Cassandra/S3/ и т. Д.

При этом для некоторых вычислений требуется внутренний государственный учет: когда вы делаете

SELECT word, count(*) FROM words GROUP BY word

Для каждого слова используется какое-то целочисленное переходное состояние. Теперь ваша работа не будет защищена от сбоев машины и перезапуска. Вот почемуstate backendсуществует. Он может сохранять то место, где оно было при вычислении (например, смещения Kafka), а также значения, при которых были подсчеты.

Итак, чтобы ответить на ваши вопросы:

  1. Оно делает. Внутренний планировщик запросов Blink использует один и тот же код (за исключением различного применения правил плана выполнения). Для меня это имеет немного больше смысла в контексте потоковой передачи или очень дорогостоящего пакетного задания (вы можете использовать дешевые спотовые инстансы AWS для диспетчеров задач, и вы будете устойчивы к вытеснению инстансов). Эта страница может помочь вам сделать выбор.

  2. Бэкэнды состояния находятся в предоставленной мной ссылке. Теперь вы можете захотеть прочитать то, где сейчас находятся ваши данные, и будете выполнять пост-вычисления. Поддерживается множество хранилищ данных. С очень большой долей скепсиса различие заключается в следующем: некоторые могут передавать данные: соединители Datastream; некоторые не могут: соединители Table / SQL. Например: соединитель MySQL JDBC Datastream будет иметь только приемник, хотя он может быть как приемником, так и источником в API таблиц.


В качестве побочного примечания: сервер состояния действительно доступен для запросов; но ИМХО лучше подходит для целей отладки.

Другие вопросы по тегам