Kafka Connect: чтение сериализованного сообщения Kafka в формате JSON, преобразование в формат Parquet и сохранение в S3.

У меня есть требование читать сериализованные сообщения JSON из темы Kafka, преобразовывать их в Parquet и сохранять в S3.

Фон

Официальный S3-Sink-Connector поддерживает формат вывода Parquet, но:

Для этого соединителя необходимо использовать AvroConverter, ProtobufConverter или JsonSchemaConverter с ParquetFormat. Попытка использовать JsonConverter (со схемами или без них) приводит к NullPointerException и StackOverflowException.

И JsonSchemaConverter выдает ошибку, если сообщение не было написано с использованием сериализации схемы JSON.

Постановка задачи

Итак, я ищу способ прочитать сообщения из темы Kafka, которые изначально были написаны в формате JSON, каким-то образом преобразовать их в формат схемы JSON, а затем подключить их к разъему S3, который будет писать в S3 в формате Parquet.

Или в качестве альтернативы, я также открыт для альтернативных решений (-которые не требуют написания кода JAVA-) с учетом основного требования (взять сообщение Kafka, поместить его в S3 как паркетные файлы). Спасибо!

PS: изменение способа первоначального написания этих сообщений Kafka (например, использование Сериализация схемы JSON с Обнаружение схемы), к сожалению, в настоящее время мне это не подходит.


person MusKaya    schedule 20.05.2021    source источник
comment
которые не требуют написания кода JAVA – github.com/pinterest/secor или Апач Нифи...   -  person OneCricketeer    schedule 21.05.2021


Ответы (1)


Как правило, ваши данные должны иметь схему, потому что она нужна Parquet (программа записи паркета S3 переводит в Avro в качестве промежуточного шага).

Вы можете изучить использование этого преобразования Connect, которое принимает схему и пытается чтобы применить схему JSONсм. тесты. Поскольку это возвращает объект Struct, вы можете попробовать использовать JsonSchemaConverter как часть приемника.

Но если вы просто добавляете случайные данные JSON в одну тему без каких-либо согласованных полей или значений, вам будет трудно применить любую схему.

person OneCricketeer    schedule 20.05.2021