Реплики Kafka и ISR: обеспечение надежности и высокой доступности данных

Apache Kafka – популярная распределенная платформа потоковой передачи событий, используемая для создания конвейеров данных в реальном времени и приложений потоковой передачи. Он предназначен для обработки высокопроизводительной, отказоустойчивой и масштабируемой потоковой передачи данных. В этой статье мы рассмотрим две важные концепции Kafka: реплики и ISR (синхронные реплики). Мы обсудим их значение, принцип работы и приведем примеры кода, демонстрирующие различные методы, связанные с репликами и ISR.

Что такое реплики:

В Kafka реплика относится к копии раздела. Разделы — это основные единицы параллелизма в темах Kafka, обеспечивающие параллельную обработку и масштабируемость. Реплики используются для обеспечения отказоустойчивости и долговечности данных за счет хранения данных на нескольких брокерах. Каждый раздел может иметь несколько реплик, распределенных по разным брокерам в кластере Kafka.

Реплики играют решающую роль в распределенной архитектуре Kafka. Когда производитель отправляет сообщение в тему, сообщение записывается в ведущую реплику раздела. Реплика-лидер отвечает за обработку запросов на чтение и запись для этого раздела. Другие реплики, называемые ведомыми репликами, непрерывно реплицируют данные от лидера, чтобы обеспечить синхронизацию.

Обеспечение надежности данных с помощью реплик:

Реплики помогают обеспечить надежность данных, сохраняя сообщения даже в случае сбоя брокера. Если ведущая реплика выходит из строя, одна из ведомых реплик выбирается в качестве нового лидера, обеспечивая бесперебойную доступность данных. По умолчанию Kafka требует минимум две реплики для раздела, но вы можете настроить больше для повышения отказоустойчивости.

Чтобы создать тему с несколькими репликами с помощью инструмента командной строки Kafka, вы можете использовать следующую команду:

kafka-topics.sh --create --topic my_topic --partitions 3 --replication-factor 2 --bootstrap-server localhost:9092

Эта команда создает тему с именем «my_topic» с тремя разделами и двумя репликами.

Что такое синхронные реплики (ISR):

Синхронные реплики (ISR) — это подмножество реплик, которые считаются «синхронизированными» с ведущей репликой. Синхронные реплики — это реплики, которые полностью догнали журнал лидера и готовы взять на себя лидерство в случае сбоя текущего лидера. Kafka использует ISR для обеспечения согласованности и высокой доступности.

Брокеры Kafka регулярно общаются с репликами, чтобы отслеживать их прогресс. Если реплика отстает или перестает отвечать на запросы, она удаляется из ISR до тех пор, пока не догонит ее снова. Этот механизм гарантирует, что в процессе репликации участвуют только реплики, актуальные для лидера, обеспечивая согласованность данных.

Управление поведением ISR:

Kafka предоставляет несколько методов управления поведением ISR. Вот несколько часто используемых методов:

  1. Изменение минимального размера ISR:
    По умолчанию Kafka требует, чтобы все реплики были синхронизированы с лидером. Вы можете изменить минимальный размер ISR, используя свойство конфигурации min.insync.replicas. Например:

    Properties props = new Properties();
    props.put("min.insync.replicas", "2");

    Эта конфигурация гарантирует, что как минимум две реплики должны быть синхронизированы с лидером.

  2. Проверка статуса ISR:
    Вы можете проверить статус ISR определенного тематического раздела с помощью инструмента командной строки Kafka. Например:

    kafka-topics.sh --describe --topic my_topic --bootstrap-server localhost:9092

    Эта команда предоставляет подробную информацию о теме, включая лидера, реплики и ISR.

  3. Обработка нечистых выборов лидера.
    В некоторых сценариях, если все реплики в ISR отключаются, Kafka допускает нечистые выборы лидера, что означает, что новый лидер избирается, даже если реплики не синхронизированы. Этим поведением можно управлять с помощью свойства конфигурации unclean.leader.election.enable.

Реплики и реплики In-Sync (ISR) являются важными компонентами распределенной архитектуры Kafka, обеспечивающими надежность и высокую доступность данных. Используя реплики, Kafka обеспечивает отказоустойчивость и репликацию между несколькими брокерами. ISR гарантирует согласованность и обеспечивает аварийное переключение в случае сбоя ведущей реплики. Понимание и эффективное управление репликами и ISR имеет решающее значение для создания надежных и отказоустойчивых приложений Kafka.