Вам не нужен AVSC, вы можете использовать файл AVDL , который в основном выглядит так же, как POJO, только с полями
@namespace("com.example.mycode.avro")
protocol ExampleProtocol {
record User {
long id;
string name;
}
}
Который, при использовании цели idl-protocol
плагина Maven, создаст этот AVSC для вас, а не вы будете писать его самостоятельно.
{
"type" : "record",
"name" : "User",
"namespace" : "com.example.mycode.avro",
"fields" : [ {
"name" : "id",
"type" : "long"
}, {
"name" : "name",
"type" : "string"
} ]
}
И это также поместит SpecificData
POJO User.java
в ваш путь к классам для использования в вашем коде.
Если у вас уже есть POJO, вам не нужно использовать файлы AVSC или AVDL. Есть библиотеки для конвертации POJO. Например, вы можете использовать Джексона , что не только для JSON, вам просто нужно, например, создать JacksonAvroSerializer
для Кафки или найти, если таковой существует.
Avro также имеет встроенную библиотеку на основе отражения .
Так что к вопросу - почему Авро (для Кафки)?
Хорошо, иметь схему - это хорошая вещь . Подумайте о таблицах РСУБД, вы можете объяснить таблицу и увидеть все столбцы. Перейдите в базы данных документов NoSQL, и они могут содержать буквально все, что угодно, и это мир JSON Kafka.
Предположим, у вас есть потребители в вашем кластере Kafka, которые не имеют представления о том, что находится в теме, они должны точно знать, кто / что было внесено в тему. Они могут попробовать консольного потребителя, и если это был обычный текст, такой как JSON, то они должны выяснить некоторые интересующие их поля, а затем снова и снова выполнять нестабильные HashMap-подобные операции .get("name")
, только для запуска в NPE, когда поле не существует С Avro вы четко определяете значения по умолчанию и поля, которые можно обнулять.
От вас не требуется для использования реестра схем, но он обеспечивает семантику explain topic
этого типа для аналогии с RDBMS. Это также избавляет вас от необходимости посылать схему вместе с каждым сообщением и расходует дополнительную пропускную способность на тему Kafka. Реестр полезен не только для Kafka, так как его можно использовать для Spark, Flink, Hive и т. Д. Для всех анализов Data Science, связанных с получением потоковых данных.
Если вы действительно хотите использовать JSON, тогда попробуйте использовать вместо MsgPack , и вы, вероятно, увидите увеличение пропускной способности Kafka и сэкономите дисковое пространство на брокерах
Вы также можете использовать другие форматы, такие как Protobuf или Thrift, , как сравнил Uber