[Пробная версия Kafka] Механизм высокой доступности Kafka

Kafka
Kafka不是完全同步,也不是完全异步,是一种特殊的ISR(In Sync Replica)。
ISR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才有资格被选举为 leader。

Кафка Реплика

  1. Тема Kafka может быть настроена на наличие n реплик (replica), количество реплик желательно должно быть меньше или равно количеству брокеров, то есть для того, чтобы на брокере была максимум одна реплика.
  2. Единицей для создания реплик является раздел темы.Каждый раздел имеет 1 лидера и последователей от 0 до n-1.Кафка делит несколько реплик на реплики Лердера и реплики последователей.
  3. Когда производитель записывает данные в раздел топика, согласно механизму ack, ack=1 по умолчанию будет записывать данные только в лидер, а затем данные в лидере будут копироваться на другие реплики, а фолловер будет периодически удаляться из Лидер.Вытягивайте данные, но операции чтения и записи для данных выполняются в реплике-лидере.Реплика-последователь повторно выбирает лидера только тогда, когда реплика-лидер зависает, и ведомый не предоставляет услуги внешнему миру.

Механизм Kafka ISR

Копия ИСР:Это копия-последователь, которая в основном согласуется с копией-лидером.Если скорость синхронизации слишком низкая, она будет исключена из копии ISR.

Синхронизация реплики:

  • LEO (последнее смещение конца): смещение конца журнала, которое записывает значение смещения следующего сообщения в базовый файл журнала объекта-реплики.Когда реплика записывает сообщение, значение LEO автоматически обновляется. Если LE0 равен 2, текущее смещение равно 1.

  • HW (высокий водяной знак): значение верхнего водяного знака. HW не должно быть больше значения LEO. Сообщения меньше значения HW считаются "принятыми" или "резервными" сообщениями и видны потребителям.

  • Производитель отправляет сообщение ведущему, а затем пишет его ведущему.Лидер создает журнал локально, а затем ведомый получает сообщение от ведущего, а ведомый записывает его в локальный лог.Он возвращает подтверждение сигнал лидеру.После того, как все сообщения в ISR будут получены, сигнал подтверждения увеличит HW, а затем лидер вернет подтверждение производителю.

Механизм репликации Кафки

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

Механизм репликации в кафке реплицируется на уровне детализации партиций.При создании топика в кафке можно задать фактор репликации (количество реплик).Этот фактор репликации определяет количество реплик партиций.Если лидер зависнет, кафка перенесет главного узла раздела другим узлам-репликам, чтобы убедиться, что сообщения этого раздела доступны. Узел-лидер отвечает за получение сообщений от производителя, а другие узлы-реплики (последователи) копируют сообщения от главного узла.

[Загрузка сторонних изображений...(image-31f1f9-1614765714779)]

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

Ключевая конфигурация: unclean.leader.election.enable

Indicates whether to enable replicas not in the ISR set to be elected as leader as a last resort, even though doing so may result in data loss

Type:	boolean
Default:	false
Valid Values:	
Importance:	high
Update Mode:	cluster-wide

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

В этом случае при выборе лидера он может быть избран только из набора ISR.Каждая точка в наборе должна быть синхронизирована с сообщением лидера, то есть задержки нет.Лидер раздела ведет список ISR устанавливает.Если точка слишком сильно отстает от More, просто выбивается из набора ISR.

После того, как производитель отправляет сообщение узлу-лидеру, лидер фиксируется только тогда, когда все реплики в ISR отправляют ACK лидеру для подтверждения сообщения.В это время производитель может считать сообщение зафиксированным.Именно из-за этого что пишет кафка-клиент Производительность зависит от производительности самого медленного брокера в наборе ISR для приема сообщений.Если производительность точки слишком низкая, ее нужно выявить как можно быстрее, а затем выкинуть из набора ISR чтобы избежать проблем с производительностью.

Как судить, что реплика не будет удалена из набора ISR?

replica.lag.max.messages : максимальное количество сообщений, которые реплики-последователи отстают от реплик-лидеров. (Удалено после версии 0.9.0.0).

replica.lag.time.max.ms: относится не только ко времени, прошедшему с момента последнего запроса на выборку из реплики, но и к времени, прошедшему с момента последнего захвата реплики.

настраиватьreplica.lag.max.messagesЕсли он равен 3, пока ведомый не отстает от лидера более чем на 2 сообщения, то узел, который может не отставать от лидера, не будет выгнан.

Установка replica.lag.time.max.ms на 300 мс означает, что если фолловер отправляет запрос на выборку каждые 300 мс, он не будет считаться мертвым и не будет исключен из набора ISR.

Эпилог

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

Но если, к сожалению, все фолловеры в списке ISR выходят из строя, вы можете выбрать только из других фолловеров, то есть вероятность потери данных, потому что неизвестно, скопировал ли этот фолловер все данные ведущего.

Бывает и крайний случай, то есть все реплики недействительны, на этот раз есть два варианта:

  • В ожидании, пока один из ISR оживет и выберет лидера, данные надежны, но время оживления неизвестно.

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

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