Последствия сохранения linger.ms на уровне 0

Мы используем кафку 0.10.2.1. В документации указано, что буфер доступен для отправки, даже если он не заполнен.

По умолчанию буфер доступен для немедленной отправки, даже если в буфере есть дополнительное неиспользуемое пространство. Однако, если вы хотите уменьшить количество запросов, вы можете установить linger.ms на значение больше 0.

Тем не менее, в нем также говорится, что производитель будет пытаться пакетировать запросы, даже если время задержки установлено на 0 мс-

Обратите внимание, что записи, которые поступают близко друг к другу по времени, обычно группируются вместе даже с linger.ms = 0, поэтому при большой нагрузке группирование будет происходить независимо от конфигурации задержки; однако установка значения больше 0 может привести к меньшему количеству и более эффективным запросам, когда они не находятся под максимальной нагрузкой, за счет небольшой задержки.

Интуитивно кажется, что любой вид пакетирования потребует некоторого времени задержки, и единственный способ достичь времени задержки 0 - это синхронизировать вызов брокера. Очевидно, что сохранение времени задержки на уровне 0, похоже, не вредит производительности так сильно, как блокировка вызова send, но, похоже, оказывает некоторое влияние на производительность. Может кто-нибудь прояснить, о чем говорится в документах выше?


person Aditya Vivek    schedule 16.03.2018    source источник


Ответы (2)


В документации говорится, что даже если вы установили время задержки на 0, вы можете получить небольшую пакетную обработку под нагрузкой, поскольку записи добавляются для отправки быстрее, чем поток отправки может их отправить. Этот параметр оптимизирован для минимальной задержки. Если мерой производительности, о которой вы действительно заботитесь, является пропускная способность, вы бы немного увеличили время задержки, чтобы выполнить пакетную обработку, и это то, к чему стремятся документы. В данном случае не столько синхронная отправка. Более подробная информация

person dawsaw    schedule 17.03.2018

При использовании linger.ms=0 запись отправляется как можно скорее, а при большом количестве запросов это может повлиять на производительность. Принуждение к небольшому ожиданию путем увеличения linger.ms при средней / высокой нагрузке оптимизирует использование пакета и увеличит пропускную способность. Это также зависит от размера записи: чем больше, тем меньше может уместиться в пакете (batch.size по умолчанию - 16 КБ).

По сути, это компромисс между количеством количества запросов и пропускной способностью, и это действительно зависит от вашего сценария, однако при немедленной отправке не используются все преимущества пакетирования и сжатия (если они включены), и я предлагаю запустить некоторые показатели с разными значениями linger.ms, например 0/5/10/50/200

В общем предложу установить linger.ms > 0

Использованная литература:

person Paizo    schedule 29.03.2018