Что такое пользовательское секционирование в брокере Kafka

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

В прошлый раз мы говорили про управление разделами в брокере Kafka. Сегодня поговорим про пользовательское секционирование в распределенной среде Kafka. Читайте далее про механизм пользовательского секционирования, который позволяет более эффективно распределять Big Data по разделам Kafka-топиков.

Пользовательское секционирование в распределенной среде Kafka

Секционирование в Kafka — это распределение данных по разделам Kafka-топика. Раздел — это последовательность Big Data сообщений топика, которые упорядочены в порядке поступления. По умолчанию, Kafka самостоятельно распределяет данные по разделам. Однако бывают случаи, когда под записи с определенным ключом требуется специальный раздел, который будет содержать записи только необходимого заданного ключа. С этой целью выполняется пользовательское секционирование, которое предполагает выделение раздела под указанный ключ. Таким образом, записи указанного ключа будут содержаться только в специальном (пользовательском) разделе [1].

Создание пользовательского разделителя: несколько практических примеров

Для того, чтобы создать пользовательский разделитель, необходимо использовать JAVA-интерфейс Partitioner, который включает методы configure(), partition() и close() [1]:

import org.apache.kafka.clients.producer.Partitioner;
import org.apache.kafka.common.Cluster;
import org.apache.kafka.common.PartitionInfo;
import org.apache.kafka.common.record.InvalidRecordException;
import org.apache.kafka.common.utils.Utils;

public class CustomPartitioner implements Partitioner {
}

Для того, чтобы поместить необходимую запись в специальный раздел, необходимо переопределить метод partition() нашего класса CustomPartition [1]:

public class CustomPartitioner implements Partitioner {
public void configure(Map<String, ?> configs) {}
@Override
public int partition(String topic, Object key, byte[] key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster){
//информация о разделе из необходимого топика
List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
//общее количество разделов
int numPartitions = partitions.size();
if(key == null){
//исключение при указании нестроковых ключей
throw new InvalidRecordException("We expect all messages to have customer name as key...");
}else{
if(((String)key).equals("custom")){
//запись с заданным ключом попадает в последний раздел, который является специальным
return numPartitions - 1;
}else{
//остальные записи распределяются по другим разделам
return (Math.abs(Utils.murmur2(keyBytes)) % (numPartitions - 1));
}
}
}
@Override
public void close(){
}
}
}

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

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

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

Освоить Apache Kafka на профессиональном уровне в качестве администратора Big Data кластеров, разработчика распределенных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Kafka в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:

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

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

Источники

  1. Н.Нархид, Г.Шапира, Т.Палино. Apache Kafka. Потоковая обработка и анализ данных

Добавить комментарий

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