Ayrat
короче, история.
В мой кластер влетает порядка 300-400М евентов в день. А даунстрим умеет в 15М в день, потому что хз почему. Говорят не могут больше обработать. При этом у них ДВА кластера в двух ДЦ. Я думал для фейловера, типа НАДЁЖНОСТЬ 100500 девяток, хуй там. это hot-hot реплики одной логики, СПЛИТЯТ НАГРУЗКУ БЛЯТЬ.
То есть мой кластер (который я недавно переписал) кидает им в два топика в двух разных ДЦ по 7.5М в день каждый. И не больше, иначе они вопят что я их зафлуживаю...
Ну короче всё работало ок в продакшне, как тут приходит письмо в пт вечер - типа у нас тут лаг невъебенный, не справляемся. Смотрю метрики, всё ок. Пишу - идите нахуй.
В ответ - вы паблишите в одну партицию в топике, у нас ВЫДЕЛЕННЫЙ консумер не ВЫТЯНЕТ.
В этот момент я чуть не охуел, пошёл чекать партиции. Во-первых, на 7.5М в день у них 45 партиций (почему 45-то???). И они в своём йоба кластере кидают по ВЫДЕЛЕННОМУ консьюмеру на каждую. Несложная наколеночная математика говорит о невъебических 2RPS на процесс. Я где-то уже здесь немного охуел, но продолжил изыскания.
(тут надо сказать что свои 400М евентов я читаю с 3х топиков, на каждом топике по сотке партиций, но консумер на каждый топик у меня ровно 1, а не 100, потому что нет смысла иметь больше, кафка там десятки тысяч месаджей может засасывать в наносекунду и делает это раундробином с каждой партиции равномерно).
И ещё уточнение. кафка по умолчанию паблишит раундробином между партишнами если нет ключа И нет партишнера кастомного. Если есть ключ, но нет партишнера, то по хешу ключа. Ключ у нас есть, партишнера нет. Пошёл смотреть чо за ключ - казалосьб бы рандомный гуид. А вот хуй, этот кусок кода я портанул с прошлой уёбищной версии и там чувак использует кастомную псевдорандомную криптографию из левой либы чтобы сделать свои гуиды. И это работало потому что него таки блять был кастомный партишнер который я выбросил нахуй при переписывании! А гуиды нихуя не рандомные и хеширование кидает их на 99% в одну партицию.
Короче, я всё почнил, но тут две беды столкнулись. Дауны на даунстриме, которые блять не могут обработать 2 месаджа в секунду. И ещё один даун который писал это до меня и придумал свой рандом. Хотя можно было выкинуть нахуй и партишнер и блять ключи в месадже для кафки и позволить драйверу кидать месаджи по дефолту между партициями раунд робином
Диёр
Мб кто помнит у меня код в облаке битбакета лежит и битбакет дико тормозил. Написали саппорту, саппорт завёл тикет. Недавно тикет просто пропал, саппорт ничего не ответил, но битбакет начал работать ощутимо быстрее.
Doge
(хотя нафига StateT в скале, где и так можно в мутабельность, но да ладно, может ссылочной прозрачности кому-то хочется)