В прошлый раз мы говорили про использование сериализатора Avro в Kafka. Сегодня поговорим про особенности настройки и использования пользовательских сериализаторов в распределенном брокере Apache Kafka. Читайте далее про пользовательские сериализаторы в Kafka, благодаря которым разработчик имеет возможность самостоятельно настраивать параметры сериализации Big Data.
Что такое пользовательские сериализаторы и как они используются в Kafka
Пользовательский сериализатор (user serializer) — это набор функций, который создается пользователем для выполнения сериализации (преобразование объекта в байтовый массив) необходимых ему объектов. Для того, чтобы создать пользовательский сериализатор, необходимо создать класс, который реализует (implements) интерфейс Serializer
, требующий определение (или переопределение) методов configure()
(для предварительной настройки, например проверка на наличие ключей или настройки отдельных ссылок), serialize()
(для сериализации соответственно), который в качестве параметров принимает топик и данные для сериализации в этом топике, а также возвращает результат типа byte-массива и close()
для закрытия потоков.
Особенности создания пользовательского сериализатора в Kafka: несколько практических примеров
В качестве примера можно создать пользовательский сериализатор для созданного класса Customer
, код для которого выглядит следующим образом [1]:
public class Customer { private int customerID; private String customerName; public Customer(int ID, String name) { this.customerID = ID; this.customerName = name;} public int getID() { return customerID;} public String getName() { return customerName;} }
Как видно из кода, класс Customer
имеет строковое поле name, которое будет сериализоваться у каждого созданного экземпляра этого класса. Для того, чтобы создать класс-сериализатор, необходимо реализовать generic-интерфейс (этот интерфейс не имеет собственного типа, он принимает тип указанного в нем объекта). Следующий код на языке Java отвечает за создание класса-сериализатора для класса Customer
[1]:
public class CustomerSerializer implements Serializer<Customer> { @Override public void configure(Map configs, boolean isKey) { // в данном примере нет параметров для отдельной конфигурации } @Override public byte[] serialize(String topic, Customer data) { try { byte[] serializedName; int stringSize; if (data == null) return null; else { if (data.getName() != null) { serializedName = data.getName().getBytes("UTF-8"); stringSize = serializedName.length; } else { serializedName = new byte[0]; stringSize = 0;}} ByteBuffer buffer = ByteBuffer.allocate(4 + 4 + stringSize); buffer.putInt(data.getID()); buffer.putInt(stringSize); buffer.put(serializedName); return buffer.array(); } catch (Exception e) { throw new SerializationException("Error when serializing Customer to byte[] " + e); }} @Override public void close() { // нечего закрывать, так как нет потоков }}
В вышерассмотренном фрагменте кода, видно, что для реализации метода serialize()
используются такие элементы, как метод getBytes()
(для преобразование строки в массив байтов) и класс byte[]
, который отвечает за формирование массива полученных байт.
Apache Kafka для инженеров данных
Код курса
DEVKI
Ближайшая дата курса
Продолжительность
24 ак.часов
Стоимость обучения
72 000 руб.
Таким образом, благодаря пользовательским сериализаторам в Kafka, разработчик имеет возможность самостоятельно контролировать сериализацию Big Data и распределение ресуросв. Это делает Apache Kafka универсальным и надежным средством для хранения и обмена большими потоками данных, что позволяет активно использовать этот брокер сообщений в задачах Data Science и разработке распределенных приложений. В следующей статье мы поговорим про операции над топиками в Kafka.
Освоить Apache Kafka на профессиональном уровне в качестве администратора Big Data кластеров, разработчика распределенных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Kafka в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- Администрирование кластера Kafka
- Apache Kafka для разработчиков
- Администрирование кластера Arenadata Streaming Kafka
Источники
- Н.Нархид, Г.Шапира, Т.Палино. Apache Kafka. Потоковая обработка и анализ данных