В kafka-ui неожиданно обнаружили всего 1 URP (Under-Replicated Partition).
Идем на машину, находим проблемную партицию и "выпавший" брокер:
kafka-topics.sh \
--bootstrap-server <ip>:<port> \
--under-replicated-partitions --describe
Видим что-то вроде:
Topic: <topic_name> Partition: 4 Leader: 3 Replicas: 3,2 Isr: 3
Проблема в
<topic_name>, лидер 3, реплики 3,2, но в ISR только 3, значит брокер 2 выпал из ISR.Смотрим настройки топика:
kafka-topics.sh \
--bootstrap-server <ip>:<port> \
--describe --topic <topic_name> \
Запоминаем значение max.message.bytes. У меня был 10 мегабайт.
На втором брокере смотрим параметры:
kafka-configs.sh \
--bootstrap-server <ip>:<port> \
--entity-type brokers --entity-name <broker_id> \
--describe --all | egrep 'replica\.fetch\.max\.bytes|replica\.fetch\.response\.max\.bytes|message\.max\.bytes'
Параметр replica.fetch.max.bytes=1048576.
Видим несоответствие: топик допускает сообщения до 10мб, а у фолловера всего 1мб. Такая реплика физически не сможет забрать большой батч. Отсюда URP.
Нужно поднять параметр replica.fetch.max.bytes, руками можно так:
for id in 1 2 3; do
kafka-configs.sh --bootstrap-server <ip>:<port> \
--entity-type brokers --entity-name $id --alter \
--add-config 'replica.fetch.max.bytes=20971520';
done
Немного ждем и проверяем URP:
kafka-topics.sh \
--bootstrap-server <ip>:<port> \
--under-replicated-partitions --describe
Ожидаем, что будет пустой вывод.
Также можно проверить сам топик:
kafka-topics.sh \
--bootstrap-server <ip>:<port> \
--describe --topic <topic_name> | grep 'Partition: 4'
Ожидаемый вывод
Topic: <topic_name> Partition: 4 Leader: 3 Replicas: 3,2 Isr: 3, 2
ISR (In-Sync Replicas) - это набор реплик партиций kafka, которые идут в ногу с лидером.
UDR - партиции, где размер ISR < replication.factor.
#kafka