Kafka不是完全同步,也不是完全异步,是一种特殊的ISR(In Sync Replica)。
ISR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才有资格被选举为 leader。
Кафка Реплика
- Тема Kafka может быть настроена на наличие n реплик (replica), количество реплик желательно должно быть меньше или равно количеству брокеров, то есть для того, чтобы на брокере была максимум одна реплика.
- Единицей для создания реплик является раздел темы.Каждый раздел имеет 1 лидера и последователей от 0 до n-1.Кафка делит несколько реплик на реплики Лердера и реплики последователей.
- Когда производитель записывает данные в раздел топика, согласно механизму 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 поддерживает выбор того, какой из них использовать, с помощью конфигурации, которая может быть изменена в зависимости от доступности и согласованности.