Avro

kafka, apache kafka, курсы администраторов spark, apache kafka для начинающих, Big Data, Data Science, kafka streaming, Kafka, брокер kafka, avro

Avro — это система для сериализации (превращение объект в массив байтов) данных, которая использует JSON (JavaScript Object Notation) для определения структуры данных (схемы), которые в результате сериализуются в компактный бинарный (принимающий в качестве значений 0 и 1) формат [1].

 

Что такое Avro: основные особенности архитектуры

Avro — это система сериализации данных, которая используется для работы с объектами в многопоточной (распределенной среде). Авро является кросплатформенной (не зависит от операционной системы и вида аппаратных ресурсов) системой и не зависит от языка и средств программирования. Архитектура Avro состоит из следующих элементов:

  • схема — это элемент описания структуры данных с помощью JSON. Схема допускает как простые типы (например, null, boolean, int, long, float, doublem bytes, string), так и сложные составные типы (словари, массивы, кортежи и др.);
  • контейнер — элемент, отвечающий за разделение данных на блоки для их последовательной сериализации. При разделении на блоки Avro может использовать две кодировки: бинарная и JSON-формат. Обычно используется бинарная кодировка, так как она быстрее и компактнее, но для отладки лучше использовать JSON-формат, так как он легко читается;
  • протокол — элемент, реализующий передачу данных в распределенной среде. Протокол Авро описывается через интерфейс RPC (Remote Procedure Call), который позволяет использовать функции и процедуры передачи в любом адресном пространстве [1].
kafka, apache kafka, курсы администраторов spark, apache kafka для начинающих, Big Data, Data Science, kafka streaming, Kafka, брокер kafka, avro
Архитектура Avro

Как появилась Avro: краткая история

Часть логотипа Авро была заимствована у британской авиастроительной компании Avro Aircraft, которая существовала с 1910 по 1963 год. Первый выпуск Avro 1.0.0 состоялся 2 ноября 2009 года.  Последний выпуск, он же актуальный на данный момент Авро 1.10.2 состоялся 15 марта 2021 года. В данный момент система Авро находится в дальнейшей разработке и развитии [1].

kafka, apache kafka, курсы администраторов spark, apache kafka для начинающих, Big Data, Data Science, kafka streaming, Kafka, брокер kafka, avro
Логотип британской авиастроительной компании Avro Aircraft

Использование Avro-сериализации в Kafka

Одна из причин активного использования брокером Kafka системы Авро — это ее распределенность, так как Kafka в основном работает в распределенной (многопоточной) среде. Для того, чтобы начать работу с Авро , необходимо настроить базовую конфигурацию для брокера Kafka [2]:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer",
"io.confluent.kafka.serializers.KafkaAvroSerializer");
props.put("value.serializer",
"io.confluent.kafka.serializers.KafkaAvroSerializer");
props.put("schema.registry.url", url);

Как видно из вышеприведенного фрагмента кода, в качестве параметра, определяющего класс-сериализатрор для ключей и значений (key.serializer/value.serializer) применяется KafkaAvroSerializer, который предоставляет методы и свойства для Avro-сериализации в Kafka.

Для того, чтобы сериализовать данные с помощью Avro, необходимо определить схему сериализуемых данных [2]:

String schemaString = "{\"namespace\": \"customerManagement.avro\",
\"type\": \"record\", " +
"\"name\": \"Customer\"," +
"\"fields\": [" +
"{\"name\": \"id\", \"type\": \"int\"}," +
"{\"name\": \"name\", \"type\": \"string\"}," +
"{\"name\": \"email\",
\"type\": [\"null\", \"string\"],
\"default\":\"null\" }" +
"]}";

Для того, чтобы данные отправлялись продюсером (который в данном случае является сериализатором) потребителю, необходимо создать экземпляр KafkaProducer со значениями типа GenericRecord, который представляет общий тип данных и применяется, когда необходимо сформировать запись на основе заданной схемы [2]:

Producer<String, GenericRecord> producer =
new KafkaProducer<String, GenericRecord>(props);
Schema.Parser parser = new Schema.Parser();
//парсинг по значениям каждого из ключей
Schema schema = parser.parse(schemaString);
for (int nCustomers = 0; nCustomers < customers; nCustomers++) {
String name = "exampleCustomer" + nCustomers;
String email = "example " + nCustomers + "@example.com";
GenericRecord customer = new GenericData.Record(schema);
customer.put("id", nCustomers);
customer.put("name", name);
customer.put("email", email);

Администрирование кластера Kafka

Код курса
KAFKA
Ближайшая дата курса
24 января, 2022
Длительность обучения
24 ак.часов
Стоимость обучения
54 000 руб.

Таким образом, благодаря многопоточной системе Авро, брокер Kafka имеет возможность сериализовать данные в распределенной среде без потерь их структуры и гарантии получения потребителем. Это позволяет аналитикам и разработчикам активно использовать эту Big Data платформу потоковой сериализации в задачах Data Science.

Записаться на курс

Смотреть раcписание

Источники

  1. https://ru.bmstu.wiki/Apache_Avro
  2. Н.Нархид, Г.Шапира, Т.Палино. Apache Kafka. Потоковая обработка и анализ данных

Поиск по сайту