Мнение: Запрос баз данных из задач потоковой передачи Spark или структурированной потоковой передачи - PullRequest
0 голосов
/ 25 октября 2019

У нас есть сценарий использования потоковой передачи Spark, в котором нам нужно вычислить некоторые метрики из загруженных событий (в Kafka), но для вычислений требуются дополнительные метаданные, которых нет в событиях.

Очевидный шаблон проектирования IМожно подумать о том, чтобы сделать точечные запросы к таблицам метаданных (в основной БД) из задач Spark Executor и использовать эту информацию метаданных во время обработки каждого события.

Другая идея состоит в том, чтобы «обогатить» принятые данныесобытия в отдельном конвейере в качестве шага препроцессора перед отправкой их в Kafka. Это может быть сделано, скажем, другой службой или задачей.

Второй сценарий более полезен в тех случаях, когда домен / среда, в которой запускается Spark / hadoop, изолированы от домена главной БД, где хранятся все метаданные. .

Есть ли общее мнение о том, как следует проводить этот тип "обогащения"? Какие еще соображения мне здесь не хватает?

1 Ответ

1 голос
/ 29 октября 2019

Обычно первый подход, о котором вы подумали, является правильным и соответствует вашим требованиям.

Известно, что в Apache Spark вы можете объединять данные в движении с данными в состоянии покоя.

Другими словами, у вас есть свой потоковый контекст, который непрерывно передает данные из Kafka.

val dfStream = spark.read.kafka(...)

В то же время вы можете подключиться к БД метастазов (например, spark.read.jdbc)

val dfMetaDb = spark.read.jdbc(...)

Вы можете объединить их вместе

dsStream.join(dfMetaDB)

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

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