Дизайн Kafka, производитель (Producer)
Балансировки нагрузки
Производитель отправляет данные непосредственно брокеру, который является лидером для раздела, без промежуточного уровня маршрутизации. Чтобы помочь производителю сделать это, все узлы Kafka могут ответить на запрос метаданных о том, какие серверы активны и где находятся лидеры разделов темы в любой момент времени, чтобы производитель мог надлежащим образом направлять свои запросы.
Клиент контролирует, в какой раздел он публикует сообщения. Это можно сделать произвольно, реализовав своего рода случайную балансировку нагрузки, или с помощью некоторой функции семантического разделения. Предоставляется интерфейс для семантического разделения, позволяя пользователю указать ключ для разделения и используя его для хеширования раздела (при необходимости также есть возможность переопределить функцию разделения). Например, если выбранный ключ был идентификатором пользователя, то все данные для данного пользователя будут отправлены в один и тот же раздел. Это, в свою очередь, позволит потребителям делать предположения относительно своего местоположения. Этот стиль разделения специально разработан для обеспечения обработки потребителями с учетом местоположения.
Асинхронная отправка
Пакетная обработка является одним из основных факторов эффективности, и для обеспечения возможности пакетной обработки производитель Kafka будет пытаться накапливать данные в памяти и отправлять более крупные пакеты за один запрос. Пакетная обработка может быть настроена для накопления не более фиксированного количества сообщений и ожидания не дольше некоторого фиксированного ограничения задержки (скажем, 64 КБ или 10 мс). Это позволяет накапливать больше байтов для отправки и выполнять несколько более крупных операций ввода-вывода на серверах. Эта буферизация настраивается и дает механизм, позволяющий компенсировать небольшую дополнительную задержку для повышения пропускной способности.
Читайте также:
Комментарии
Отправить комментарий