В прошлый раз мы говорили про пользовательское секционирование в брокере Apache Kafka. Сегодня поговорим про особенности механизма фиксации текущего смещения в Kafka. Читайте далее про механизм фиксации текущего смещения в популярном распределенном брокере Kafka.
Что представляет собой фиксация текущего смещения в Kafka
Смещение (offset) в Kafka — порядковый номер (индекс), который указывает на положение записи (сообщения) в топике (или в разделе топика). Брокер Kafka узнает о появлении новой записи благодаря фиксации смещений. Фиксация смещений — это обновление текущей позиции (или добавление новой) записи в разделе топика. Фиксация текущего смещения представляет собой механизм, который фиксирует все сообщения данного пакета, получаемые методом poll() независимо от возникновения разного рода ошибок (за исключением тех, которые нельзя избежать программно) и только после фиксации каждого сообщения в данном пакете происходит переход к следующему пакету [1].
Особенности фиксации текущих смещений в Kafka: несколько практических примеров
Фиксация текущего смещения представляет собой синхронный вид фиксаций. Стоит также отметить, что этот вид фиксаций является наиболее надежным, так как он фиксирует смещение сразу же в момент выполнения метода poll() (отвечает за получение сообщений) и сразу же после этого завершает выполнение данной процедуры фиксации. В случае сбоя генерируется исключение вида CommitFailedException. За фиксацию текущего смещения отвечает метод commitSync(). В качестве примера рассмотрим фиксацию текущих смещений после завершения обработки каждого последнего пакета сообщений [1]:
while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.printf("topic = %s, partition = %s, offset = %d, customer = %s, country = %s\n", record.topic(), record.partition(), record.offset(), record.key(), record.value()); } try { // фиксация каждого последнего сообщения consumer.commitSync(); } catch (CommitFailedException e) { // запись в журнал в случае сбоя фиксации log.error("commit failed", e) } }
В данном примере после завершения обработки всех записей текущего пакета вызывается метод commitSync() для фиксации последнего смещения, прежде чем выполнять опрос для получения остальных сообщений. Стоит также отметить, что метод commitSync() будет повторять фиксацию до тех пор, пока не возникнет непоправимая ошибка (например, выход из строя брокера), которая можно разве что записать в журнал [1].
Таким образом, благодаря фиксации текущих смещений, брокер Kafka может гарантировать весьма надежное хранение Big Data с низким уровнем их потерь. Это делает Apache Kafka универсальным и надежным средством для хранения и обмена большими потоками данных, что позволяет активно использовать этот брокер сообщений в задачах Data Science и разработке распределенных приложений.
Администрирование кластера Kafka
Код курса
KAFKA
Ближайшая дата курса
12 февраля, 2025
Продолжительность
24 ак.часов
Стоимость обучения
72 000 руб.
Освоить Apache Kafka на профессиональном уровне в качестве администратора Big Data кластеров, разработчика распределенных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Kafka в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- Администрирование кластера Kafka
- Apache Kafka для разработчиков
- Администрирование кластера Arenadata Streaming Kafka
Источники
- Н.Нархид, Г.Шапира, Т.Палино. Apache Kafka. Потоковая обработка и анализ данных