Обмен данными между узлами (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-интерфейс.