Сценарий. У меня тема с низким объемом (~ 150 мс/сек), для которой мы хотели бы иметь низкая задержка распространения от производителя к потребителю.
Я добавил отметку времени от производителя и прочитал ее у потребителя, чтобы записать задержку распространения, с конфигурациями по умолчанию. msg (20 байт) показал задержку распространения от 1960 мс до 1230 мс. Задержка с сетью не связана с этим, я попробовал 1 производителя и 1 простой потребитель на той же машине.
Когда я попытался отрегулировать интервал смыва темы до 20 мс, он падает
до 1100 мс до 980 мс. Затем я попытался настроить потребителей "fetcher.backoff.ms"
на 10 мс, он упал до 1070 мс - 860 мс.
Проблема: для 20 байтов сообщения, я хотел бы иметь задержку распространения как можно ниже, а ~ 950 мс - это более высокая цифра.
Вопрос: что-то, что я упускаю из конфигурации? Я приветствую комментарии, задержка, которую вы получили как минимум.
Предположение. Система Kafka включает в себя операции ввода-вывода диска, прежде чем потребитель получит сообщение от производителя, и это связано с RPM на жестком диске и т.д.
Обновление: Пытался настроить политику флеша журнала для долговечности и задержек.
Ниже приведена конфигурация:
# The number of messages to accept before forcing a flush of data to disk
log.flush.interval=10
# The maximum amount of time a message can sit in a log before we force a flush
log.default.flush.interval.ms=100
# The interval (in ms) at which logs are checked to see if they need to be
# flushed to disk.
log.default.flush.scheduler.interval.ms=100
Для тех же msg из 20 байтов задержка составляла 740 мс -880мс.
В самой конфигурации отображаются следующие утверждения.
Есть несколько важных компромиссов:
- Долговечность. Неубранные данные подвергаются большему риску потери в случае сбоя.
- Задержка: данные не становятся доступными для потребителей до тех пор, пока они не будут сброшены (что добавляет задержку).
- Пропускная способность: флеш обычно является самой дорогой операцией.
Итак, я считаю, что нет возможности спуститься до отметки 150 мс - 250 мс. (без обновления оборудования).