Как применить схему на лету с потоковым Spark - PullRequest
0 голосов
/ 04 января 2019

У меня есть веб-сервис, который получает сообщения SOAP, и с помощью XJC мне удалось частично преобразовать их в pojos, а затем использовать сериализатор kafka json для отправки указанных сообщений в Kafka.

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

Требуется, по крайней мере, иметь некоторую структуру данных в озере данных. Однако, поскольку исходная схема дана в виде 2 xsds, которые циклически зависимы, я не смог найти решение о том, как применить структуру к данным, когда они поступают. Мне известно о выводе схемы, получающей пакет из сообщения, но мне не хватает образцов данных в настоящее время.

Следует отметить, что сообщения различаются в зависимости от исходной схемы, поскольку в ней есть элементы <choice>, поэтому каждое сообщение может не совпадать. Как я могу добиться структурирования этих данных с учетом ограничений, которые я изложил выше? Я не думал прикреплять какой-либо код, так как это скорее план атаки, чем проблема с кодом на данный момент. Надеюсь, это в рамках руководящих принципов, и кто-то может помочь мне запустить этот проект. Заранее спасибо.

1 Ответ

0 голосов
/ 06 января 2019

Если вам действительно нужна четко определенная, развивающаяся схема, которая может хорошо работать с Datalakes (HDFS, S3 и т. Д.), Я предлагаю использовать Avro через реестр Confluent Schema вместо JSON. Вы даже можете использовать KafkaAvroSerializer вместо JSON, который вы используете в настоящее время.

Avro не является обязательным требованием для Kafka, но вам также будет проще использовать Kafka Connect Framework для записи в HDFS или S3 и запрашивать эти данные с помощью таких инструментов SQL, как Hive / Presto / SparkSQL. Здесь предпочтительнее Kafka Connect, потому что нет никакого потокового кода, который вам действительно нужно написать.

Если вы хотите работать со схемами XML и XSD, взгляните на kafka-connect-xml transformer

Другими альтернативами для Datalake ETL с хорошей поддержкой XML, с которыми я столкнулся, являются NiFi и StreamSets.

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