Что такое партиции в Kafka и как они работают
Что проверяют
Знает ли тестировщик, какие гарантии Kafka даёт на самом деле, и умеет ли строить проверки вокруг них. Партиция это единица, от которой зависят порядок, параллелизм и дубли, то есть ровно то, что ломается в интеграционных тестах.
Как отвечать
Топик делится на партиции, каждая это упорядоченный лог только для дозаписи, позиция сообщения в ней называется смещением. Реплики партиции живут на разных брокерах, запись и чтение ведёт лидер, остальные догоняют и образуют набор синхронных реплик.
Три факта, ради которых задают вопрос.
Порядок гарантируется только внутри партиции. Между партициями порядка нет, поэтому события одной сущности отправляют с общим ключом: партиция выбирается по хешу ключа. Без ключа продюсер раскладывает сообщения пачками, а не строго по кругу.
Партиции задают потолок параллелизма. В группе потребителей партиция закреплена ровно за одним потребителем, лишние простаивают. Число партиций можно увеличить, но не уменьшить, и после увеличения ключи поедут в другие партиции.
Доставка по умолчанию не реже одного раза. Дубли штатны, обработчик обязан быть идемпотентным, а строже этого работают идемпотентный продюсер и транзакции.
Отсюда проверки для тестирования: порядок только в рамках ключа, поведение при повторной доставке, лаг потребителя как метрика, ребалансировка при падении экземпляра, отставание реплик.
Где спотыкаются
Пишут тест на то, что сообщения приходят в порядке отправки, на топике с несколькими партициями. Тест краснеет случайно, его записывают в нестабильные и отключают, хотя ошибочно само ожидание.
Проверяют идемпотентность только на успешном сценарии. Дубли рождаются на повторах после таймаута и при ребалансировке, поэтому сценарий обязан включать переотправку и перезапуск потребителя.
Наращивают потребителей ради скорости и не видят эффекта. Пока партиций меньше, чем экземпляров в группе, новые просто стоят без назначенных партиций.