Обмен данными между узлами (exchange)#
В процессе выполнения распределенных запросов узлы CedrusData обмениваются данными друг с другом. Запрос состоит из одной или нескольких стадий (stage) — последовательности операторов, которые могут быть выполнены локально на одном узле. Экземпляр stage, запущенный на конкретном узле называется задачей (task). Распределение task по узлам происходит динамически.
Stage связаны друг с другом операторами Exchange, которые пересылают результат работы нижестоящего task на вход вышестоящего task на этом же или другом узле. Exchange состоит из двух частей:
Sink — результат работы task, который будет отправлен в вышестоящий task. Sink находится на узле-источнике.
Client — сущность, которая запрашивает (poll) результат работы нижестоящего task. Client находится на узле-приемнике.
Данный документ содержит настройки конфигурации sink и client.
sink.max-buffer-size#
Тип: data size
Значение по умолчанию:
32MB
Размер выходного буфера, содержащего результаты task, ожидающие отправку вышестоящей задаче. Увеличение размера буфера может повысить утилизацию сети при передаче данных между stage, если присутствует высокая задержка (latency) или кластер состоит из большого количества узлов, но также приводит к увеличению пикового потребления памяти запросом.
sink.max-broadcast-buffer-size#
Тип: data size
Значение по умолчанию:
200MB
Размер выходного буфера для broadcast sink. Буфер освобождается после того, как данные были отправлены на все узлы, выполняющие вышестоящую задачу. Обычно буфер такого типа используется для выполнения build-части replicated join. Увеличение размера буфера может повысить утилизацию сети при передаче данных между stage, если присутствует высокая задержка (latency) или кластер состоит из большого количества узлов, но также приводит к увеличению пикового потребления памяти запросом.
exchange.max-buffer-size#
Тип: data size
Значение по умолчанию:
32MB
Размер входного буфера на принимающей стороне. При достижении предельного размера client перестает запрашивать данные из sink. Увеличение буфера может повысить пропускную способность и сократить время обработки запроса, но уменьшает объем памяти, доступной для других целей.
exchange.max-response-size#
Тип: data size
Минимальное значение:
1MBЗначение по умолчанию:
16MB
Максимальный размер сетевого сообщения при обмене данными между sink и client. Увеличение значения может повысить пропускную способность при наличии высоких сетевых задержек.
exchange.client-threads#
Тип: integer
Минимальное значение:
1Значение по умолчанию:
25
Количество потоков на принимающей стороне, которые запрашивают данные из нижестоящих task. Более высокое значение может повысить производительность при обработке больших объемов данных, но также приводит к более высокому потреблению памяти и более частым переключениям контекста CPU.
exchange.concurrent-request-multiplier#
Тип: integer
Минимальное значение:
1Значение по умолчанию:
3
Множитель, определяющий количество параллельных client.
Например, если exchange.max-buffer-size=32 MB, 20 MB уже использовано, а средний размер одного сетевого сообщения равен 2MB,
то максимальное количество клиентов составит множитель * ((32MB - 20MB) / 2MB) = множитель * 6.
Увеличение данного параметр может повысить параллелизм и улучшить утилизацию сети, но приводит к увеличению потребления памяти.
exchange.compression-codec#
Тип: string
Допустимые значения:
NONE,LZ4,ZSTDЗначение по умолчанию:
NONE
Кодек сжатия, используемый для Компрессия и декомпрессия файлов при обмене данными между узлами, а также при обмене данными со storage в режиме Fault-tolerant execution.
exchange.data-integrity-verification#
Тип: string
Допустимые значения:
NONE,ABORT,RETRYЗначение по умолчанию:
ABORT
Определяет поведение при обнаружении проблем с целостностью данных.
Значение по умолчанию ABORT приводит к принудительной отмене запроса.
Значение NONE отключает проверку.
Значение RETRY приводит к повторной передаче данных при обнаружении нарушения целостности.
cedrusdata.exchange.bypass-loopback#
Тип: boolean
Значение по умолчанию:
true
Определяет механизм передачи данных, когда sink и client находятся на одном узле.
Если значение равно true, данные будут переданы напрямую, минуя сетевой стек.
Если значение равно false, данные будут переданы через loopback-интерфейс.