Порядок и параллелизм в брокере: как выбрать ключ партиции и что делать с горячими партициями?
Ключ сообщения определяет партицию, а партиция определяет две вещи сразу: порядок (внутри партиции он строгий) и параллелизм (одна партиция — один обработчик в группе). Поэтому выбор ключа — это выбор единицы упорядочивания. Правильный ключ — минимальная сущность, внутри которой порядок действительно важен: идентификатор заказа, счёта, устройства. Слишком крупный ключ (идентификатор клиента в мультиарендной системе) создаёт горячую партицию: один крупный клиент занимает один обработчик, а остальные простаивают. Слишком мелкий или случайный ключ убивает порядок там, где он нужен. Лечится перекос тремя способами: составной ключ с солью (tenant:bucket) там, где порядок нужен не по всему клиенту; отдельный топик для крупных арендаторов; параллельная обработка внутри партиции с сохранением порядка по подключу. Число партиций менять можно только вверх, и это меняет распределение ключей — существующий порядок в этот момент нарушается.