Это происходит с 0.10.0
и происходит даже с min.insync.replicas=2
.
Лидер раздела записывает подписчикам перед тем, как его совершить (особенно для тем с acks=all
, таких как __consumer_offsets
). Когда происходит короткое прерывание сети, последователь может быстро восстановиться и до того, как сообщения будут записаны лидеру, и, следовательно, реплика остановится из-за нечистого выбора лидера. Это была известная проблема , которая была исправлена на 0.11.0
.
Одним из возможных решений было бы установить unclean.leader.election.enable=true
для таких тем, как __consumer_offsets
, а затем перезапустить брокеров. Согласно Кафка документов ,
unclean.leader.election.enable
: Указывает, следует ли включить реплики, не входящие в состав ISR, для выбора в качестве лидера в качестве последнего средства,
даже если это может привести к потере данных.
Когда происходит сбой брокера, раздел лидера будет переключаться контроллером, который также выберет одну реплику в ISR в качестве лидера раздела. Если реплика недоступна, вы не сможете писать или читать из этого раздела.
Если установить для unlcean.leader.election.enable
значение true
, первая доступная реплика будет выбрана в качестве лидера раздела, даже если ее нет в ISR, и, следовательно, некоторые сообщения могут быть потеряны!
Однако, чтобы решить эту проблему, я бы предложил перейти на более стабильную версию (если вы все еще используете 0.10.0).