Тут возникла странная ситуация с кафкой... Уже кучу метрик вывел

на графики - видно проблемы, но корневую причину не могу найти.
История такая - всё работает прекрасно, продюсеры пишут, консьюмеры читают, трафик как обычно (нет какого-то резкого скачка), кол-во коннектов на брокерах где-то по 300 шт.
Внезапно брокер 1 исключает брокера 3 из in-sync реплик по большому кол-ву партиций топиков.
Через минут 10 брокер исключает брокера 1 из in-sync реплик по большому кол-ву партиций топиков и в это же время брокер 1 исключает брокеров 2, 3 из in-sync реплик по большому кол-ву партиций топиков (остается один)

Со стороны приложений начинается тупняк, кажется на методе commit offset у консьюмеров. Продюсеры работают без проблем.
ошибки и таймауты commit offset видно на графиках.
Брокеры в одном L2 сегменте на виртуалках. CPU, RAM, DISK-I/O, network на околонулевых отметках - запас как минимум кратный.
В это же время чуть больше становится на сетевом стеке ретрансмитов (грубо с 0-10 до 30-50 с пиками до 150).
Тестирую сеть между хостами - потерь нет. Т.е. ретрансмиты судя по всему из-за тупняка внутри брокеров (переполнены сетевые буферы???).
Перезапуск приложений с косьюмерами позволяет немного разгрести очередь и потом опять возникает проблема. Потом проблема уходит спустя пару часов, пока искали корневую причину.

Что это может быть в кафке и как бы это на график вывести?

5 ответов

42 просмотра

Не являюсь сетевым админом, но проверьте так же связь с хостами зукипера. Не глючит ли кластер зукипера? Видят ли хосты друг друга и кафку? Так же я ловил кейс, когда провайдер геореплецировал массово данные и диски/сеть жёстко тупили. Узнавали мы про это косвенно. Так же мы ловили похожее поведение на старых версиях кафки при большом количестве партиций в кластере. Там крутили таймауты(возможно крутили tcp, уже не помню), помогало. А ну и ещё читайте логи, там обычно если что-то с кафкой, то информация есть. Те же самые ретраи самой Кафки между брокерами там видны.

Nikolay-Didenko Автор вопроса
Ivan Rasikhin
Не являюсь сетевым админом, но проверьте так же св...

зукиперы на тех же хостах - по здоровью у них всё тоже ровно. Кол-во записей росло в моменты проблем, т.к. лидеры менялись. Про DRS то я не подумал. Надо глянуть, но это бы было видно на графиках ОС (а там всё ровно.) кафка в этой инсталляции не такая уж и старая 3.1.0. И партиций не много 2500 на 3 брокера и rf=3. Пока нагрузка маленькая и данных не много. В логах вот и увидел, что синхронизация реплик стала страдать и брокеры друг друга исключали из insync реплик разных партиций. Больше ничего существенного в логах не видно. В логах консьюмеров видно было ретраии на коммиты оффсетов.

А сеттинги брокеров тюнили или дефолтовые?

Nikolay-Didenko Автор вопроса
Dmitriy Vityuk
А сеттинги брокеров тюнили или дефолтовые?

нет, намеренно не меняли практически ничего кроме очевидных моментов (тут где-то дефолты могут быть, но оставлены для явности): num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 # This parameter must be less than the JAVA heap size socket.request.max.bytes=104857600 queued.max.requests=500 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=3 transaction.state.log.replication.factor=3 transaction.state.log.min.isr=1 # Increase carefully, cluster performance may drop message.max.bytes=1000000 replica.lag.time.max.ms=10000 leader.imbalance.check.interval.seconds=30

Nikolay Didenko
нет, намеренно не меняли практически ничего кроме ...

ну из очевидного, раз у вас реплики разъезжаются, то накрутить: num.replica.fetchers (с этим аккуратней, я удвоил дефолт, стало хуже, поэтому по чуть чуть добавляйте). replica.fetch.max.bytes (в тестах на 3-х брокерах дальше 50MB у меня уже особо на скорость не влияло) replica.socket.receive.buffer.bytes (лично в моих тестах 360кб дало более менее норм результаты, при сильном завышении начинались проблемы) еще смотрю у себя в конфиге, что в два раза сократил replica.socket.timeout.ms, но почему уже не помню... может и нет особого в этом смысла. А вообще в идеале синтетикой сформировать свой типовой профиль нагрузки (размер сообщения, рейт, число консьюмеров, продьюсеров) и погонять на тесте играясь с настройками. Мне так удалось существенно (в разы) улучшить производительность на тех же виртуалках.

Похожие вопросы

Обсуждают сегодня

Так а кто может спарсить всех участников чата? Идишники
Magic
18
да пофиг на капчу зашел в чат и молчишь при этом ты нонейм? пошел вон
Magic
17
Как удалить health check в Consul? Казалось бы, это должно быть не сложно, но я не могу найти в документации ничего про это, только про добавление service с health check "в н...
Roman
2
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
13
Privet! Mozhet jesti ideji - nemogu sdelatj upload backup s filestore cerez WEB. Fail okolo 450mb, eto mozhet bitj prichinoi? Nemogu ponjatj..kak zagruzitj backup... Poluchaju...
Matiss 🤘 Black Oak IT 🌳 Batumi 🌴 Latvija
5
Нужно магазин с тильды на опен кат перенести Есть кто умеет? В лс
Magic
8
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
А кто знает в тейлоре до сих пор есть конфликты слагов или поправили уже?
Black Cat
5
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
Я хочу запустить свой проект в тг. Что-то между пирамидой и майнилкой. Еще подобного ничего не было. Уникальная идея. Нужен именно не бот, а приложение. С ввод, выводом тон...
Павел А.
6
Карта сайта