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

на графики - видно проблемы, но корневую причину не могу найти.
История такая - всё работает прекрасно, продюсеры пишут, консьюмеры читают, трафик как обычно (нет какого-то резкого скачка), кол-во коннектов на брокерах где-то по 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 ответов

72 просмотра

Не являюсь сетевым админом, но проверьте так же связь с хостами зукипера. Не глючит ли кластер зукипера? Видят ли хосты друг друга и кафку? Так же я ловил кейс, когда провайдер геореплецировал массово данные и диски/сеть жёстко тупили. Узнавали мы про это косвенно. Так же мы ловили похожее поведение на старых версиях кафки при большом количестве партиций в кластере. Там крутили таймауты(возможно крутили 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
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
2
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
кто-нибудь уже пробовал это?
Lencore
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
❓ Подскажите как сделать в группе телеги функцию (кнопку) пересылки сообщения где есть нарушение правил? Бот к каждому сообщению (по определенным ключам) добавляет снизу кнопк...
Alexander
4
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
8
Карта сайта