Настройки продюсера определяют сериализацию, буферизацию, сжатие, партицирование и гарантии доставки.
Bootstrap-серверы
| Настройка |
Описание |
Пример |
bootstrap.servers |
Адреса брокеров для подключения и получения метаданных кластера |
localhost:9092,localhost:9093 |
Сериализация ключа и значения
| Настройка |
Описание |
Пример |
key.serializer |
Сериализатор ключа |
StringSerializer |
value.serializer |
Сериализатор значения |
StringSerializer |
Варианты сериализаторов: StringSerializer, ByteArraySerializer, LongSerializer, а также пользовательские реализации.
Отправка сообщений в буфер
| Настройка |
Описание |
Пример |
batch.size |
Размер пакета в байтах перед отправкой брокеру |
16384 (16 KB) |
linger.ms |
Максимальное время ожидания перед отправкой пакета |
5 (5 мс) |
buffer.memory |
Общий объём памяти для буферизации сообщений |
33554432 (32 MB) |
Сжатие
| Настройка |
Описание |
Значения |
compression.type |
Тип сжатия для сообщений |
none, gzip, snappy, lz4, zstd |
Партицирование
| Настройка |
Описание |
Пример |
partitioner.class |
Логика выбора партиции для сообщения |
DefaultPartitioner, RoundRobinPartitioner, UniformStickyPartitioner |
Подтверждения (acks)
| Значение |
Описание |
0 |
Продюсер не ждёт подтверждений — максимальная скорость, высокий риск потери |
1 |
Ждёт подтверждения от лидера партиции |
all (-1) |
Ждёт подтверждений от всех ISR-реплик — максимальная надёжность |
Дополнительные настройки
| Настройка |
Описание |
Пример |
retries |
Количество повторных попыток при неудаче |
3 |
enable.idempotence |
Включение идемпотентности для exactly-once |
true |
max.request.size |
Максимальный размер сообщения |
1048576 (1 MB) |
request.timeout.ms |
Таймаут ожидания подтверждения от брокера |
30000 (30 сек) |
На собеседовании: популярный вопрос — объяснить разницу между acks=0, acks=1 и acks=all. Покажите, что понимаете компромисс: acks=0 — fire-and-forget (потеря возможна), acks=1 — лидер подтвердил (потеря при падении лидера до репликации), acks=all — все ISR подтвердили (потеря практически невозможна, но выше latency).