Как настроить продюсер в Kafka
Что проверяют
Знаете ли вы настройки, отвечающие за надёжность и пропускную способность, и понимаете ли, что они друг с другом связаны.
Как отвечать
Разложите настройки по смыслу, а не списком.
Обязательное: адреса брокеров, сериализаторы ключа и значения.
Надёжность
acks=allвместе сmin.insync.replicasна стороне брокера: подтверждение только после записи на нужное число реплик;enable.idempotence=true: защита от дублей при повторной отправке, заодно сохраняет порядок в партиции;retriesиdelivery.timeout.ms: сколько система готова бороться за доставку;- транзакции, если нужно связать несколько отправок или чтение с записью.
Пропускная способность
batch.sizeиlinger.ms: продюсер копит сообщения в пакет. Небольшая задержка в несколько миллисекунд заметно увеличивает пропускную способность;compression.type(lz4,zstd): меньше трафика и места на диске ценой процессора;buffer.memoryиmax.block.ms: что делать, когда буфер заполнен, ждать или падать.
Порядок и распределение: ключ сообщения определяет партицию, а max.in.flight.requests.per.connection вместе с идемпотентностью отвечает за сохранение порядка при повторах.
Обязательно про код: send асинхронный, поэтому ошибку надо обрабатывать в колбэке или через возвращаемое будущее значение, а перед завершением приложения вызывать flush и close, иначе часть сообщений останется в буфере. И один продюсер на приложение, он потокобезопасен и рассчитан на переиспользование.
Где спотыкаются
Вызывают send и не проверяют результат, теряя ошибки молча.
Ставят acks=1 ради скорости и теряют сообщения при смене лидера партиции.
Создают продюсер на каждый вызов и получают лишние соединения вместо пакетной отправки.