Обработка больших сообщений с Kafka - PullRequest
0 голосов
/ 14 марта 2019

Как обрабатывать большие сообщения в Kafka, такие как более 20 МБ и т. Д.

[2019-03-13 08: 59: 10,923] Ошибка при отправке сообщения в тест темы с ключом: 13 байтов, значение: 11947696 байт с ошибкой: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) org.apache.kafka.common.errors.RecordTooLargeException: в запрос включено сообщение, превышающее максимальный размер сообщения, которое сервер примет.

[2019-03-13 03: 59: 14,478] ОШИБКА Ошибка при отправке сообщения в тест темы с ключом: 13 байт, значение: 11947696 байт с ошибкой: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) org.apache.kafka.common.errors.RecordTooLargeException: при сериализации сообщение имеет размер 11947797 байт, который превышает максимальный размер запроса, настроенный с помощью конфигурации max.request.size.

1 Ответ

0 голосов
/ 14 марта 2019

Нам нужно установить следующие конфигурации

брокер

replica.fetch.max.bytes : изменения в этом свойстве позволят репликам в посредниках отправлять сообщения в кластере и обеспечивать правильную репликацию сообщений. Если это слишком мало, то сообщение никогда не будет реплицировано, и, следовательно, потребитель никогда не увидит сообщение, потому что сообщение никогда не будет зафиксировано (полностью реплицировано).

message.max.bytes : это самый большой размер сообщения, которое может получить брокер от производителя.

Брокер (тема)

max.message.bytes : Наибольший размер пакета записи, разрешенный Kafka. Если это значение увеличивается, и есть потребители старше 0.10.2, размер выборки потребителей также должен быть увеличен, чтобы они могли получать партии записей такого размера. В последней версии формата сообщений для эффективности записи всегда группируются в пакеты. В предыдущих версиях формата сообщений несжатые записи не группируются в пакеты, и в этом случае это ограничение применяется только к одной записи (по умолчанию это сообщение брокера. Max.bytes).

Производитель

max.request.size: Максимальный размер запроса в байтах. Этот параметр будет ограничивать количество пакетов записей, которые производитель отправит за один запрос, чтобы избежать отправки огромных запросов. Это также эффективно ограничивает максимальный размер пакета записи. Обратите внимание, что на сервере установлен собственный предел размера пакета записи, который может отличаться от указанного.

compress.type: Если установлено значение snappy, это увеличит общий объем данных, которые могут быть отправлены одним запросом, и должен быть связан с большим размером batch.size.

buffer.memory: Если сжатие включено, размер буфера также должен быть увеличен.

batch.size: Размер пакета должен составлять не менее 10 с КБ, уменьшающиеся результаты можно увидеть на уровне около 300 КБ (меньше для удаленного клиента). Большие партии также дают лучшую степень сжатия.

linger.ms: linger.ms вытесняет любые границы, которые были помещены в размер пакета. Увеличьте это значение, чтобы меньшие партии не отправлялись в более медленное время производства

Потребитель

fetch.message.max.bytes: Это будет определять наибольший размер сообщения, которое может быть получено потребителем.

max.partition.fetch.bytes: Максимальный объем данных на раздел, который сервер вернет.

...