Спека — основной способ описания желаемого пайплайна. Любой высокоуровневый API к Flow генерирует спеку пайплайна.
У пайплайна есть две спеки — Spec и DynamicSpec:
Spec — статический объект, содержащий топологию всего пайплайна. Этот объект можно менять только при условии остановки пайплайна. Гарантируется, что в момент выполнения вся система имеет одинаковое представление о Spec.
DynamicSpec — динамическая часть спеки. Её можно менять в любой момент, она применится ко всем частям системы асинхронно. В DynamicSpec обычно хранятся размеры буферов, таймауты, число партиций и т. п.
Также важной частью является Config ноды. В отличие от спеки, конфиг задаётся ровно один раз в рамках релиза и не подлежит динамическому изменению. Возможно, в будущем часть параметров конфига будут перемещены в спеки.
Важно
Все параметры во Flow имеют оптимальные значения по умолчанию. Не меняйте настройки, если вы не уверены, для чего они нужны и на что могут повлиять.
Значения по умолчанию можно найти поиском по имени параметра в кодовой базе Flow. В основном они сгруппированы в файле spec.cpp.
Spec
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
validate_binary_version
|
Тип: bool
Значение по умолчанию: false
|
|
binary_version
|
Тип: std::string
Значение по умолчанию: TString("")
|
|
validate_binary_checksum
|
Тип: bool
Значение по умолчанию: false
|
|
binary_checksum
|
Тип: std::string
Значение по умолчанию: TString("")
|
|
computations
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TComputationIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TComputationSpec>>
Значение по умолчанию: {}
Именованное перечисление всех узлов пайплайна. Ключи должны соответствовать [0-9A-Za-z_-]+.
|
|
resources
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TResourceIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TResourceSpec>>
Значение по умолчанию: {}
Именованное перечисление всех ресурсов. Ключи должны соответствовать [0-9A-Za-z_-]+.
|
|
streams
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TStreamSpec>>
Значение по умолчанию: {}
Именованное перечисление всех потоков данных. Ключи должны соответствовать [0-9A-Za-z_-]+.
|
Computation
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
computation_class_name
|
Тип: std::string
Обязательный параметр
Имя встроенного класса Computation или адаптера process function.
Для новой пользовательской логики на C++ выберите один из встроенных адаптеров TProcessFunction*Computation. Саму функцию зарегистрируйте через YT_FLOW_DEFINE_PROCESS_FUNCTION и укажите в processing_function. Пользовательские классы Computation создавать не следует.
|
|
process_function_graph
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TProcessFunctionGraphSpec>
Несколько process function, связанных идентификаторами стримов и выполняемых в одном TProcessFunctionComputation или TProcessFunctionSwiftMapComputation. Можно объединять batch и per-message функции. ID внутренних сообщений выводятся из исходных родителей на границе графа, выходного стрима и suffix; timestamps и внешние ID назначаются по правилам host computation. Swift требует детерминированного replay; batch функции задают родителей каждого результата через SetParents. Объединение разных входных сообщений требует parameters/allow_batching_with_relaxed_guarantees = %true и даёт гарантию at-least-once. Раннер заменяет граф полями processing_function, processing_function_parameters, timer_streams, streams_dependency и allow_timer_self_dependency, поэтому не задавайте эти поля вместе с графом.
|
|
processing_function
|
Тип: std::optional<std::string>
Полное имя process function, зарегистрированной через YT_FLOW_DEFINE_PROCESS_FUNCTION. Обязательно для адаптеров TProcessFunction*Computation, если не задан process_function_graph.
|
|
processing_function_parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Статические параметры process function. Тип параметров задаётся при регистрации YT_FLOW_DEFINE_PROCESS_FUNCTION.
|
|
group_by_schema
|
Тип: NYT::TIntrusivePtr<NYT::NTableClient::TTableSchema>
Значение по умолчанию: {'value': [], 'attributes': {'strict': true, 'unique_keys': false}}
Схема для группировки всех входных потоков, является схемой динтаблицы. Свойства и требования к схеме:
- Не содержит никаких правил на порядок.
- Может содержать вычислимые поля.
- Должна быть пустой только у
SourceComputation.
- Для остальных
Computation первая колонка должна иметь тип uint64. Рекомендуется, чтобы эта колонка была вычислимым хешем от остальных колонок (например, farm_hash). Нужно иметь ввиду, что использование операции взятия остатка при целочисленном делении % и bigb_hash в expression запрещено.
|
|
experimental_enable_non_uint_key
|
Тип: std::optional<bool>
|
|
input_stream_ids
|
Тип: THashSet<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>>
Значение по умолчанию: []
Входные потоки.
Схемы всех потоков должны быть приводимы к group_by_schema.
|
|
output_stream_ids
|
Тип: THashSet<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>>
Значение по умолчанию: []
Выходные потоки Computation'а. В частности, могут использоваться как входы у других Computation'ов.
|
|
streams_dependency
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, THashSet<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>>>
Значение по умолчанию: {}
Описание зависимостей между потоками, включая внутренние source и timer потоки.
Пример: {stream1, {stream2, stream3}} — stream1 зависит от потоков stream2 и stream3.
Указывается только для timer- и output-потоков. В случае отсутствия описания для потока список зависимостей будет сгенерирован автоматически:
- у
timer-потоков в списке будут все input- и source-потоки;
- у
output-потоков — все timer, input и source.
|
|
watermark_strategy
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TWatermarkStrategySpec>
Значение по умолчанию: {}
Настройки, связанные с EventWatermark.
Необязательный параметр. Должен быть указан в рамках SourceComputation.
|
|
required_resource_ids
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TResourceIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TResourceDescription>>
Значение по умолчанию: {}
Список необходимых ресурсов для работы Computation.
Имеет параметр alias для локального переименования ресурса (например, Computation ожидает ресурс с именем YTClient, а подаваемый ресурс имеет другое имя). Через параметры controller и worker можно управлять созданием ресурса на Controller и на Worker.
|
|
parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Значение по умолчанию: {}
Произвольные параметры для Computation и ComputationController
|
|
timer_streams
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TTimerSpec>>
Значение по умолчанию: {}
Настройки всех timer потоков. Ключи должны соответствовать [0-9A-Za-z_-]+.
|
|
key_visitor_streams
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TKeyVisitorStreamSpec>>
Значение по умолчанию: {}
Настройки всех key_visitor потоков. Ключи должны соответствовать [0-9A-Za-z_-]+.
|
|
source_streams
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TSourceSpec>>
Значение по умолчанию: {}
Настройки всех source потоков. Ключи должны соответствовать [0-9A-Za-z_-]+.
|
|
sinks
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TSinkIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TSinkSpec>>
Значение по умолчанию: {}
Настройки всех sink. Ключи должны соответствовать [0-9A-Za-z_-]+.
|
|
external_state_managers
|
Тип: THashMap<std::string, NYT::TIntrusivePtr<NYT::NFlow::TExternalStateManagerSpec>>
Значение по умолчанию: {}
Декларативное объявление external state менеджеров для этого Computation. Ключ — имя клиента, которое process function передаёт в InitExternalStateClient (должен начинаться с /, например /state); значение содержит имя класса менеджера и его параметры.
|
|
external_state_joiners
|
Тип: THashMap<std::string, NYT::TIntrusivePtr<NYT::NFlow::TExternalStateJoinerSpec>>
Значение по умолчанию: {}
Декларативное объявление external state joiner'ов (read-only-доступ к внешним стейтам через join по ключу) для этого Computation. Ключ — имя клиента, которое process function передаёт в InitExternalStateClient (должен начинаться с /, например /state); значение содержит имя класса joiner'а и его параметры.
|
|
state_joiners
|
Тип: THashMap<std::string, NYT::TIntrusivePtr<NYT::NFlow::TStateJoinerSpec>>
Значение по умолчанию: {}
Декларативное объявление state joiner'ов (read-only-доступ к внутреннему стейту другого Computation через join по ключу) для этого Computation. Ключ — имя клиента, которое process function передаёт в InitClient (должен начинаться с /); значение указывает целевой computation_id, его state_name и join_on.
|
|
heavy_hitters
|
Тип: NYT::NFlow::THeavyHittersSpec
Значение по умолчанию: {}
Настройки обнаружения высокочастотных ключей.
|
|
pivot_finder
|
Тип: NYT::NFlow::TPivotFinderSpec
Значение по умолчанию: {}
|
|
input_ordering
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TInputOrderingSpec>
Значение по умолчанию: {}
Настройки порядка обработки входных потоков.
|
|
distribution_ordering
|
Тип: NYT::NFlow::EDistributionOrdering
Значение по умолчанию: strict
Настройки порядка распределения выходных сообщений. Управляет тем, может ли быть гонка между останавливающимися и работающими партициями с точки зрения порядка распределения выходных сообщений порожденных из входящих сообщений с одним и тем же ключом.
|
|
worker_group
|
Тип: NYT::TStrongTypedef<std::string, NYT::NFlow::TWorkerGroupIdTag, NYT::TStrongTypedefOptions{true}>
Значение по умолчанию: TString("")
|
|
allow_timer_self_dependency
|
Тип: bool
Значение по умолчанию: false
|
|
use_compact_input_messages
|
Тип: std::optional<bool>
Использовать компактную таблицу compact_input_messages для дедупликации входных сообщений вместо input_messages. Компактный ключ дедупликации хранит только хеш key[0] и CityHash128(message_id), что снижает размер строки (~200 байт → ~71 байт).
Необязательный параметр. Если значение не задано, таблица выбирается автоматически: компактная используется всегда, кроме случая, когда включён experimental_enable_non_uint_key (тогда первая колонка ключа может быть не uint64, и для дедупликации нужен полный ключ). Явно заданное значение имеет приоритет над автоматическим выбором. Включать use_compact_input_messages вместе с experimental_enable_non_uint_key запрещено.
|
WatermarkStrategy
Рекомендуется заполнять у SourceComputation. Остальные Computation могут не поддерживать или поддерживать ограниченно.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
event_timestamp_assigner
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TEventTimestampAssignerSpec>
Значение по умолчанию: {}
Автоматическое заполнение EventTimestamp всех output сообщений на базе значения определённой колонки.
|
|
watermark_generator
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TWatermarkGeneratorSpec>
Настройки алгоритма генерации EventWatermark. Для Computation хотя бы с одним source отсутствие параметра эквивалентно пустому блоку с настройками по умолчанию. Computation с несколькими source обрабатывается как несколько независимых single-source Computation: для каждого source по отдельности и в этом порядке применяются эвристики недоступных групп, idle-партиций и late-data-партиций, а подготовленные партиции объединяются только после этого. idle_partitions.max_ratio применяется отдельно к каждому source, а решения о подавлении availability-групп одного source не влияют на другие. Поэтому полностью idle source не считается partial-idle stall и сам по себе не поднимает /idle_partitions_watermark_stall, даже если он удерживает итоговый watermark Computation, пока другой source остаётся активным. Идентификаторы availability-групп между источниками могут различаться.
|
|
watermark_alignment
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TWatermarkAlignmentSpec>
Настройки выравнивания source между разными партициями, в том числе разных Computation
|
|
watermark_percentile
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TWatermarkPercentileSpec>
Значение по умолчанию: {}
Настройка "персентильного" EventWatermark. Используется для игнорирования самых старых событий в пределах сконфигурированного процента.
|
EventTimestampAssigner
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
column
|
Тип: std::optional<std::string>
Колонка со временем
|
|
format
|
Тип: NYT::NFlow::ETimestampFormat
Значение по умолчанию: seconds
Используемый формат времени (seconds и milliseconds)
|
|
limit_by_system_timestamp
|
Тип: bool
Значение по умолчанию: false
Ограничить EventTimestamp значением SystemTimestamp для защиты от битых значений из будущего
|
WatermarkGenerator
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
use_source_watermark
|
Тип: bool
Значение по умолчанию: false
Использовать SourceWatermark для генерации EventWatermark. Эта опция полностью отключает все эвристики для определения EventWatermark и её нужно использовать строго в тех случаях, когда во входном потоке есть специальные маркеры с EventWatermark.
|
|
out_of_orderness_bound
|
Тип: TDuration
Значение по умолчанию: 0
Ограничение сверху на возможное переупорядочивание событий, используемое для оценки EventWatermark. По умолчанию переупорядочивание не учитывается.
|
|
idle_partitions
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TIdlePartitionsSpec>
Настройки эвристики для игнорирования партиций с нулевым потоком записи.
|
|
late_data_partitions
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TLateDataPartitionsSpec>
|
Настройки IdlePartitions:
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
duration
|
Тип: TDuration
Значение по умолчанию: 1m
Время, как долго партиция должна быть пустой, чтобы поверить, что в неё не идёт записи.
|
|
max_ratio
|
Тип: double
Значение по умолчанию: 0.4
Доля партиций, которые могут быть исключены из расчёта вотермарка этой логикой. Идейный смысл опции — защита от продвижения вотермарка, когда поставщик данных прекратил писать сообщения в очередь по причине инцидента на его стороне. Выставление значения опции в 1.0 по сути отключает эту защиту.
|
Настройки UnavailablePartitionGroups:
Источник: yt/yt/flow/library/cpp/common/spec.h
В структуре нет основных параметров.
WatermarkAlignment
Модуль используется для выравнивания входных потоков. Может приводить к полной остановке чтения в случае проблем с доступностью и/или оценкой Watermark у отдельных партиций или SourceComputation.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
group_name
|
Тип: NYT::TStrongTypedef<std::string, NYT::NFlow::TWatermarkAlignmentGroupTag, NYT::TStrongTypedefOptions{true}>
Значение по умолчанию: default-alignment-group
Имя группы
|
|
drift_bound
|
Тип: TDuration
Значение по умолчанию: 20m
Максимальное возможное опережение вотермарка отдельной партиции от вотермарка всей группы
|
|
read_delays
|
Тип: std::optional<THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, TDuration>>
Опция для продвинутого использования. Если EventTimestamp выходного сообщения больше, чем EventWatermark - Delay хотя бы для одного указанного потока, то чтение приостанавливается. При неправильной настройке опция может привести к полной остановке чтения.
|
WatermarkPercentile
Модуль используется для игнорирования старых данных в потоках при расчёте EventWatermark. Каждая партиция по каждому исходящему потоку поддерживает множество ещё необработанных сообщений. По умолчанию для расчета EventWatermark берется минимальное значение EventTimestamp среди всех сообщений (то есть учитывается 100% событий).
Если событие попадает в value персентиль - оно безусловно учитывается для расчёта EventWatermark. Если событие не попадает в указанный персентиль, однако отличается от EventTimestamp этих событий не более, чем на delay - то оно тоже будет учтено для расчёта EventWatermark. Таким образом, алгоритм расчёта сводится к EventWatermark = max(MinEventTimestamp, PercentileEventTimestamp - delay), где MinEventTimestamp - минимум по всем событиям, а PercentileEventTimestamp - значение EventTimestamp в соответствующем value персентиле.
Нужно учитывать, что inflight одного потока в рамках партиции может содержать в моменте десятки сообщений, поэтому значения вида 99, 99.9 могут работать неотличимо от 100 - то есть не приводя к желаемому эффекту. Кроме того, даже если старых событий от всего потока меньше 1%, эти старые события могут быть распределены неравномерно между партициями. Поэтому разумнее выставлять значения вида 80, 90 и т.п. Чтобы избежать негативных эффектов в виде неучёта свежих событий, существует параметр delay: благодаря ему будет теряться информация лишь о действительно старых событиях. Если таковых нет, то система будет работать так же, как и при value, равном 100, без потери какой-либо информации.
Данный модуль влияет только на расчёт EventWatermark и никак не влияет на SystemWatermark.
Важно
Настройки никак не влияют на агрегацию информации с разных партиций - будет взято в любом случае минимальное значение по всем партициям.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
value
|
Тип: NYT::TStrongTypedef<double, NYT::NFlow::TWatermarkPercentileTag, NYT::TStrongTypedefOptions{true}>
Значение по умолчанию: 100.0
Процент безусловно учитываемых для расчёта EventWatermark событий
|
|
delay
|
Тип: TDuration
Значение по умолчанию: 1m
Порог свежести для событий ниже выбранного персентиля
|
LateDataPartitions
Модуль используется для игнорирования партиций, содержащих исключительно старые данные. Работает аналогично WatermarkPercentile, но на уровне всех партиций, а не сообщений внутри партиции.
WatermarkPercentile позволяет игнорировать старые сообщения внутри партиции, но если вся партиция содержит только старые данные, она всё равно будет тормозить общий EventWatermark. Модуль LateDataPartitions решает эту проблему, позволяя игнорировать такие партиции целиком.
Алгоритм расчёта: FinalWatermark = max(MinPartitionWatermark, PercentilePartitionWatermark - Delay), где MinPartitionWatermark — минимальный watermark среди всех партиций, а PercentilePartitionWatermark — watermark партиции в указанном value перcентиле (партиции сортируются по watermark).
Если партиция попадает в value персентиль — она безусловно учитывается. Если партиция не попадает в указанный персентиль, однако её watermark отличается от персентильного не более, чем на delay — она тоже будет учтена. Партиции с watermark ниже порога (PercentileWatermark - Delay) считаются содержащими только late data, и их watermark «скрывается» (приводится к FinalWatermark).
Например, при value=90 и 100 партициях: 90% партиций (с наибольшими watermark) учитываются безусловно, а оставшиеся 10% (с наименьшими watermark) — только если их отставание от 90-го персентиля не превышает delay.
Важно
Этот модуль применяется после IdlePartitions. Idle-партиции уже исключены из расчёта до применения логики LateDataPartitions.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
value
|
Тип: NYT::TStrongTypedef<double, NYT::NFlow::TWatermarkPercentileTag, NYT::TStrongTypedefOptions{true}>
Значение по умолчанию: 100.0
|
|
delay
|
Тип: TDuration
Значение по умолчанию: 1m
|
Timer
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
time_type
|
Тип: NYT::NFlow::ETimeType
Значение по умолчанию: event_time
Используемый таймером тип времени: event_time, system_time, real_time
|
|
streams
|
Тип: std::optional<THashSet<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>>>
Перечисление потоков, за которыми таймер следит.
|
|
streams_with_delays
|
Тип: std::optional<THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, TDuration>>
Перечисление потоков, за которыми таймер следит с указанием индивидуальной задержки
|
|
deduplicate_equal_timestamps
|
Тип: bool
Значение по умолчанию: true
Включение логики дедупликации таймеров: при попытке создания таймера с тем же ключом и trigger_timestamp, останется только один, с меньшим значением EventTimestamp
|
Если не указаны streams и streams_with_delays, то таймер следит за потоками согласно streams_dependency с нулевой дополнительной задержкой.
Source
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
source_class_name
|
Тип: std::string
Значение по умолчанию: TString("")
Имя соответствующего класса.
Должен быть зарегистрирован с помощью YT_FLOW_DEFINE_SOURCE.
|
|
parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Значение по умолчанию: {}
Произвольные параметры для соответствующего класса.
|
Встроенные реализации сорсов описаны в документации по коннекторам.
Sink
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
sink_class_name
|
Тип: std::string
Значение по умолчанию: TString("")
Имя соответствующего класса.
Должен быть зарегистрирован с помощью YT_FLOW_DEFINE_SINK.
|
|
input_stream_ids
|
Тип: THashSet<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>>
Значение по умолчанию: []
Список входных потоков.
Здесь могут быть только потоки, указанные в output_stream_ids всего Computation.
|
|
parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Значение по умолчанию: {}
Произвольные параметры для соответствующего класса.
|
Встроенные реализации синков описаны в документации по коннекторам.
HeavyHitters
Модуль обнаружения высокочастотных ключей.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
window
|
Тип: TDuration
Значение по умолчанию: 5m
Временное окно.
|
|
threshold
|
Тип: double
Значение по умолчанию: 0.01
Ключи, которые встречаются в потоке чаще, чем threshold, будут считаться высокочастотными. Алгоритм использует O(1 / threshold) памяти.
|
|
limit
|
Тип: long
Значение по умолчанию: 5
Максимальное количество показываемых высокочастотных ключей.
|
Настройки порядка обработки событий из входных потоков. Первыми будут обработаны события с наименьшим временем.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
time_type
|
Тип: NYT::NFlow::ETimeType
Значение по умолчанию: event_time
Время для сортировки: event_time, system_time, real_time
|
|
stream_delays
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, TDuration>
Значение по умолчанию: {}
Задержки для входных потоков. Если поток не указан — то задержки не будет
|
Streams
В streams должны быть зарегистрированы только output потоки. Source потоки существуют только внутри соответствующих партиций и никак не персистятся в YT. А timer потоки имеют фиксированную схему.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
class_name
|
Тип: std::optional<std::string>
|
|
schema
|
Тип: NYT::TIntrusivePtr<NYT::NTableClient::TTableSchema>
Обязательный параметр
Cхема потока. Является схемой динтаблицы. Не может содержать сортировки и вычислимые поля.
Изменение схем рекомендуется осуществлять через полную остановку пайплайна: в этом случае внутри пайплайна не останется output сообщений.
|
|
migration_function
|
Тип: std::string
Значение по умолчанию: NYT::NFlow::DefaultMigrationFunction
|
Resource
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
resource_class_name
|
Тип: std::string
Обязательный параметр
Имя соответствующего класса.
Должен быть зарегистрирован с помощью макроса YT_FLOW_DEFINE_RESOURCE.
|
|
parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Значение по умолчанию: {}
Произвольные параметры для соответствующего класса.
|
|
file_providers
|
Тип: THashMap<NYT::TStrongTypedef<std::string, NYT::NFlow::TFileProviderIdTag, NYT::TStrongTypedefOptions{true}>, NYT::TIntrusivePtr<NYT::NFlow::TFileProviderSpec>>
Значение по умолчанию: {}
Именованные файловые провайдеры ресурса. Контроллер добавляет файловый снимок в целевую ревизию только после обнаружения всех имён; собственная часть целевой спецификации контроллера может публиковаться независимо. Воркеры материализуют точные ревизии из полученной цели. Такие ресурсы поддерживаются только на воркерах и должны иметь controller = %false во всех путях required_resource_ids, которые могут до них дойти. Ключи должны соответствовать [0-9A-Za-z_-]+.
|
|
dependencies
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TResourceIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TResourceDescription>>
Значение по умолчанию: {}
Ресурсы, от которых зависит данный ресурс. Повторяет структуру required_resource_ids из Computation.
|
|
required_capabilities
|
Тип: THashMap<std::string, long>
Значение по умолчанию: {}
|
|
preload_required
|
Тип: bool
Значение по умолчанию: false
|
|
always_on
|
Тип: bool
Значение по умолчанию: false
Если true, ресурс загружается заранее при старте юнита и держится в памяти всё время жизни юнита (не выгружается), а не лениво при первом обращении. Загружается только на тех юнитах, где ресурс требует хотя бы одна computation (см. worker / controller в required_resource_ids): ресурс, нужный только на worker'е, не грузится на controller'е, а ресурс, который не требует ни одна computation, не грузится вовсе. Взаимоисключающе с preload_required.
|
DynamicSpec
Источник: yt/yt/flow/library/cpp/common/spec.h
Stream и Resource в данный момент не имеют или не поддерживают динамические параметры.
Computation
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
batch_duration
|
Тип: TDuration
Значение по умолчанию: 1s
Время максимального набора входного батча. Для очередей YTsaurus неполный батч добирается, пока с предыдущего батча не пройдёт это время; после неполного ответа очереди следующий запрос тоже выполняется не раньше этого момента.
|
|
max_rows_per_batch
|
Тип: NYT::NYTree::TSize
Значение по умолчанию: 1K
Максимальный размер входного батча в строках. Считается отдельно для input_streams, timer_streams и для каждого из source_streams. Для очередей YTsaurus считаются распакованные сообщения Flow; батч может превысить лимит на одну строку очереди.
|
|
max_bytes_per_batch
|
Тип: NYT::NYTree::TSize
Значение по умолчанию: 10Mi
Максимальный размер входного батча в байтах. Считается аналогично max_rows_per_batch. Для очередей YTsaurus считается размер распакованных сообщений; превышение — как для max_rows_per_batch.
|
|
max_keys_per_batch
|
Тип: std::optional<NYT::NYTree::TSize>
|
|
draining
|
Тип: bool
Значение по умолчанию: false
Режим Draining нужен для сброса пайплайна — в нём Computation перестанет запускать таймеры и доставать новые события из Source.
Команда stop-pipeline останавливает весь пайплайн через полный сброс. В отдельных Computation режим можно выставлять для дебага.
|
|
empty_batch_backoff
|
Тип: TDuration
Значение по умолчанию: 250ms
В случае пустой эпохи Computation дополнительно «спит» указанное время. Не рекомендуется выставлять параметр меньше 100 мс.
|
|
lease_check_period
|
Тип: TDuration
Значение по умолчанию: 1m
|
|
retryable_request
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicRetryableRequestSpec>
Значение по умолчанию: {}
|
|
tracer
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicPartitionTracerSpec>
Значение по умолчанию: {}
|
|
parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Значение по умолчанию: {}
Произвольные динамические параметры класса Computation.
|
|
processing_function_parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Динамические параметры process function. Тип параметров задаётся при регистрации YT_FLOW_DEFINE_PROCESS_FUNCTION. Для графа process function содержит динамические параметры узлов в nodes.
|
|
source_streams
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TDynamicSourceSpec>>
Значение по умолчанию: {}
Динамические параметры всех Sources.
|
|
key_visitor_streams
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TStreamIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TDynamicKeyVisitorStreamSpec>>
Значение по умолчанию: {}
|
|
sinks
|
Тип: THashMap<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TSinkIdTag>, NYT::TIntrusivePtr<NYT::NFlow::TDynamicSinkSpec>>
Значение по умолчанию: {}
Динамические параметры всех Sinks.
|
|
external_state_managers
|
Тип: THashMap<std::string, NYT::TIntrusivePtr<NYT::NFlow::TDynamicExternalStateManagerSpec>>
Значение по умолчанию: {}
|
|
external_state_joiners
|
Тип: THashMap<std::string, NYT::TIntrusivePtr<NYT::NFlow::TDynamicExternalStateJoinerSpec>>
Значение по умолчанию: {}
|
|
state_joiners
|
Тип: THashMap<std::string, NYT::TIntrusivePtr<NYT::NFlow::TDynamicStateJoinerSpec>>
Значение по умолчанию: {}
|
|
state_manager
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicStateManagerSpec>
Значение по умолчанию: {}
|
|
input_store
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicInputStoreSpec>
Значение по умолчанию: {}
|
|
timer_store
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicTimerStoreSpec>
Значение по умолчанию: {}
|
|
output_store
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicOutputStoreSpec>
Значение по умолчанию: {}
|
|
timer_store_count_limit
|
Тип: NYT::NYTree::TSize
Значение по умолчанию: 250K
|
|
timer_store_byte_size_limit
|
Тип: NYT::NYTree::TSize
Значение по умолчанию: 100Mi
|
|
blocked_time_window
|
Тип: TDuration
Значение по умолчанию: 10m
Окно усреднения для доли времени, которую джоба провела заблокированной на каждом из лимитов (blocked_share в диагностиках). Доля нормируется на время жизни джобы, поэтому джоба, заблокированная с самого старта, показывает ~1 независимо от своего возраста.
|
|
input_rows_throttler_id
|
Тип: std::optional<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TThrottlerIdTag>>
Id троттлера для ограничения скорости обработки сообщений. Если задан, перед каждой итерацией Computation ждёт квоту, равную числу сообщений во входном батче. Id должен присутствовать в dynamic_spec/throttlers. Подробнее в разделе Distributed Throttler.
|
|
input_bytes_throttler_id
|
Тип: std::optional<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TThrottlerIdTag>>
Аналогично input_rows_throttler_id, но квотируется суммарный byte_size сообщений батча — системный размер их сериализованного представления.
|
|
input_rows_throttler_class_id
|
Тип: std::optional<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TQuotaClassIdTag>>
Класс квоты для троттлера из input_rows_throttler_id. Класс должен быть объявлен в этом троттлере; default выбирает зарезервированный класс с весом 1.0. Требует заданного input_rows_throttler_id.
|
|
input_bytes_throttler_class_id
|
Тип: std::optional<NYT::NFlow::TStrongIdentifierTypedef<NYT::NFlow::TQuotaClassIdTag>>
Класс квоты для троттлера из input_bytes_throttler_id. Класс должен быть объявлен в этом троттлере; default выбирает зарезервированный класс с весом 1.0. Требует заданного input_bytes_throttler_id.
|
|
skip_if_expression
|
Тип: std::optional<std::string>
YTQL-предикат, по которому входные сообщения отфильтровываются (пропускаются) ещё до обработки Computation. Сообщение пропускается (дропается), если предикат вычисляется в булево true.
Предикат вычисляется над колонками payload сообщения плюс мета-колонками $message_id, $stream_id, $system_timestamp, $event_timestamp, $alignment_timestamp. Результат обязан быть булевым: NULL или небулевой результат приводит к исключению.
Применяется как к input-, так и к source-потокам. Число пропущенных сообщений экспортируется метриками input_streams/skipped_by_expression_count и source_streams/skipped_by_expression_count.
|
Source
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Значение по умолчанию: {}
Произвольные динамические параметры соответствующего класса Source.
|
|
draining
|
Тип: bool
Значение по умолчанию: false
|
Sink
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
parameters
|
Тип: NYT::TIntrusivePtr<NYT::NYTree::IMapNode>
Значение по умолчанию: {}
Произвольные динамические параметры соответствующего класса Sink.
|
JobManager
Конфиг модуля управления джобами на контроллере.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
balancer_type
|
Тип: NYT::NFlow::EJobBalancerType
Значение по умолчанию: cpu_aware
|
|
use_cpu_aware_balancer
|
Тип: std::optional<bool>
Включает экспериментальную балансировку CPU. Балансировка по умолчанию может приводить к сильному перекосу ресурсов CPU между воркерами.
|
|
rebalance_delay_after_pipeline_sync
|
Тип: TDuration
Значение по умолчанию: 30s
|
|
rebalance_target_deviation
|
Тип: double
Значение по умолчанию: 0.1
Максимальное допустимое отклонение.
|
|
rebalance_hot_mode_coeff
|
Тип: double
Значение по умолчанию: 2.0
|
|
rebalance_action_min_time
|
Тип: TDuration
Значение по умолчанию: 4s
|
|
rebalance_action_max_time
|
Тип: TDuration
Значение по умолчанию: 12s
|
|
rebalance_sync_period
|
Тип: TDuration
Значение по умолчанию: 10s
Период cpu_aware балансировки. Не рекомендуется выставлять значение меньше 15min, так как балансировка смотрит на метрики 10min.
|
|
rebalance_count_exceeded_allowed
|
Тип: double
Значение по умолчанию: 1.2
|
|
rebalance_even_load_thresholds
|
Тип: THashMap<NYT::NFlow::EBalanceResource, NYT::TIntrusivePtr<NYT::NFlow::TEvenLoadThresholds>>
Значение по умолчанию: {}
Пороги гейта «нагрузка распределена ровно» по ресурсам, например {cpu = {spread = 2.0; ratio = 1.5}}. Учитываются только ресурсы с ненулевым весом. Незаданные поля берут значения по умолчанию: разброс 1.0 ядро для CPU и 1 GB для памяти, отношение 1.2.
|
|
rebalance_min_cpu_spread
|
Тип: std::optional<double>
Устаревший параметр: то же, что spread в записи cpu параметра rebalance_even_load_thresholds. Явно заданное значение в rebalance_even_load_thresholds имеет приоритет.
|
|
rebalance_min_cpu_ratio
|
Тип: std::optional<double>
Устаревший параметр: то же, что ratio в записи cpu параметра rebalance_even_load_thresholds. Явно заданное значение в rebalance_even_load_thresholds имеет приоритет.
|
|
balance_weights
|
Тип: THashMap<NYT::NFlow::EBalanceResource, double>
Значение по умолчанию: {'cpu': 1.0, 'memory': 0.0}
Относительная важность ресурсов для cpu_aware балансировки, например {cpu = 80; memory = 20}. Указанные ключи накладываются на значение по умолчанию {cpu = 1; memory = 0}; веса нормируются, значимы только пропорции. Ресурс с нулевым весом не участвует в балансировке, поэтому по умолчанию балансируется только CPU. Порог rebalance_target_deviation применяется к нормированной взвешенной сумме: добавление второго ресурса пропорционально уменьшает вклад первого. При ненулевом весе memory память партиции включает измеренную память её джобы и байты входных буферов её потоков. Каждый входной поток учитывается по большему из его demand, то есть запроса до урезания пулом буферов, и фактически занятых байтов. Поток без demand, например с явно переопределённым лимитом или на воркере без buffer manager v2, учитывается по фактически занятым байтам.
|
|
balancer_metrics_source
|
Тип: NYT::NFlow::EBalancerMetricsSource
Значение по умолчанию: job
Откуда cpu_aware балансировщик берёт загрузку CPU партиции. partition — 10-минутная метрика текущей джобы, а пока её нет — сохранённая история партиции (замер предыдущей джобы, переживает переезд и рестарт); 30-секундные и мгновенные метрики не используются. job — прежнее поведение: только метрики текущей джобы с откатом на 30-секундную и мгновенную. По умолчанию выключено, пока изменение раскатывается по пайплайнам; временный переключатель.
|
|
balance_warmup_protection
|
Тип: bool
Значение по умолчанию: false
Не переезжать работающие джобы, пока их метрики не созрели: есть 10-минутная метрика и прошло ещё одно 10-минутное окно после её появления. Такая джоба ещё расплачивается за предыдущий переезд, а её вес неизвестен. Защита действует для всех ресурсов балансировки: конфигурация только по памяти тоже ждёт созревания CPU-метрики. Перегруженный по количеству воркер, у которого подходящая для кика партиция не созрела, в этом раунде пропускается целиком. Джобы моложе двух минут остаются подвижными: они ещё ничего не вложили, а на рестарте пайплайна воркеры регистрируются не одновременно. Партиции без джобы размещаются как обычно. По умолчанию выключено, пока изменение раскатывается по пайплайнам; временный переключатель.
|
|
balance_warmup_idle_worker_share
|
Тип: double
Значение по умолчанию: 0.2
Доля воркеров группы без джоб этой группы, начиная с которой warm-up protection снимается: заполнить простаивающие воркеры важнее, чем метрики переезжающих джоб, например когда после рестарта пайплайна воркеры регистрируются с разницей в минуты. Временный переключатель для отката.
|
|
worker_coef_mode
|
Тип: NYT::NFlow::EWorkerCoefMode
Значение по умолчанию: legacy
Как cpu_aware балансировщик оценивает относительную скорость воркеров. probing — по партициям, переехавшим между воркерами: сравнивается CPU на сообщение до и после переезда, наблюдения по парам воркеров накапливаются в balancer_state и решаются совместно; без переездов все коэффициенты равны 1. legacy — прежняя оценка по текущей загрузке партиций каждого воркера относительно средних по компьютейшнам. По умолчанию выключено, пока изменение раскатывается по пайплайнам; временный переключатель.
|
|
worker_coef_half_life
|
Тип: TDuration
Значение по умолчанию: 1d
Период полураспада накопленного наблюдения пары воркеров: при слиянии нового наблюдения старое теряет вес пропорционально прошедшему времени. Без новых наблюдений оценка не меняется.
|
|
worker_coef_retention
|
Тип: TDuration
Значение по умолчанию: 7d
Сколько помнить наблюдения воркера, отсутствующего в группе; вернувшийся раньше воркер получает свой коэффициент обратно.
|
|
worker_coef_prior_weight
|
Тип: double
Значение по умолчанию: 0.05
Вес априорного «коэффициент воркера равен 1» в единицах веса наблюдений (переезд одной партиции весит 1 / N, где N — число партиций на воркере-приёмнике). Фиксирует среднее коэффициентов группы на 1 и гасит одиночные наблюдения.
|
|
worker_coef_max_ratio
|
Тип: double
Значение по умолчанию: 4.0
Предохранитель: коэффициенты воркеров ограничены отрезком [1 / max_ratio, max_ratio].
|
|
disable_even_load_gate
|
Тип: std::optional<bool>
|
|
async_balancing
|
Тип: bool
Значение по умолчанию: true
|
|
graceful_move
|
Тип: bool
Значение по умолчанию: true
|
|
zero_queue_latency
|
Тип: TDuration
Значение по умолчанию: 1s
|
|
planning_horizon
|
Тип: TDuration
Значение по умолчанию: 10m
|
|
preloading_timeout
|
Тип: TDuration
Значение по умолчанию: 30m
Сколько балансер resource_queue держит предзагрузку модели, которая ещё грузится, считая от запроса. До этого предзагрузка не снимается, а воркер считается воркером вычислений, которым нужна модель; после — обычные правила.
|
|
minimum_worker_count
|
Тип: unsigned long
Значение по умолчанию: 1
Минимальное число воркеров, на которые стоит распределять нагрузку.
Должно быть обязательно заполнено, чтобы избежать ошибок Out of memory и перегрузки отдельных воркеров при старте системы. Рекомендуемое значение — около 60% от целевого количества воркеров (чтобы пережить потерю части воркеров, например при отключении одного дата-центра).
|
|
lost_job_timeout
|
Тип: TDuration
Значение по умолчанию: 10s
Через какое время признавать Job потерянным, если в контроллер не приходит обновление статуса джоба. То же время используется, чтобы признавать потерянным воркера.
|
|
faulty_address_window
|
Тип: TDuration
Значение по умолчанию: 5m
Окно на котором считается экспоненциально затухающий счетчик числа потерь соединения контроллера с воркером. Если этот счетчик превышает faulty_address_attempts, то воркер считается faulty и он игнорируется при балансировке. Решает проблему воркеров, у которых постоянно теряется коннект с контроллером. В том числе проблему двух воркеров с разными incarnation id и одним address (когда в деплое оказывается два пода считающих, что у них один и тот же FQDN).
|
|
faulty_address_attempts
|
Тип: unsigned long
Значение по умолчанию: 5
Смотрите описание параметра faulty_address_window.
|
|
partitioning
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicPartitioningSpec>
Значение по умолчанию: {}
Настройки партиционирования пайплайна.
|
|
worker_group_override
|
Тип: THashMap<NYT::TStrongTypedef<std::string, NYT::NFlow::TWorkerGroupIdTag, NYT::TStrongTypedefOptions{true}>, NYT::TIntrusivePtr<NYT::NFlow::TDynamicJobManagerGroupSpec>>
Значение по умолчанию: {}
|
|
partition_history_limit
|
Тип: long
Значение по умолчанию: 4096
Сколько историй партиций балансер хранит между перезапусками джоб, см. balancer_metrics_source. Истории лежат в одном персистентном документе с ограничением на размер, поэтому при достижении предела самая лёгкая история уступает место более тяжёлой, а более лёгкие не сохраняются. При остановке пайплайна истории не сохраняются вовсе.
|
JobTracker
Конфиг модуля управления джобами на воркере.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
job_control_threads
|
Тип: int
Значение по умолчанию: 3
Количество управляющих тредов.
В большинстве случаев достаточно значения по умолчанию.
|
|
job_threads
|
Тип: std::optional<int>
Количество тредов для выполнения джобов.
Если не задано, размер пула вычисляется автоматически на основе CPU-лимита ноды.
Если при этом вычислить лимит ноды не получилось, то будет создано 30 тредов.
|
|
buffer_state_manager
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicBufferStateManagerSpec>
Значение по умолчанию: {}
Конфиг модуля управления буферами для входящих и исходящих сообщений.
|
|
load_throughput_throttler
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TLoadThroughputThrottlerSpec>
Значение по умолчанию: {'limit': 134217728.0}
|
|
state_cache
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicStateCacheSpec>
Значение по умолчанию: {}
|
|
mark_performance_metrics_steady_after_first_iteration
|
Тип: bool
Значение по умолчанию: false
Сообщать счётчики скоростей джобы (CPU, входные сообщения, память) как установившиеся только после первой завершённой итерации с входными данными, чтобы балансировщик читал оконные метрики cpu_usage_10m и подобные после того, как инициализация джобы (выкачка стейта, построение индексов) вымоется из окон; сами счётчики не сбрасываются. Джоба, не получавшая входных данных минуту, тоже считается установившейся: простаивающая джоба сообщает свои околонулевые скорости, а не остаётся неизмеренной. По умолчанию выключено, пока изменение раскатывается по пайплайнам; временный переключатель.
|
BufferStateManager
Конфиг модуля управления размерами буферов.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
manage_period
|
Тип: TDuration
Значение по умолчанию: 1s
Частота пересчёта размера буфферов.
|
|
demand_window
|
Тип: TDuration
Значение по умолчанию: 1m
Временное окно, на котором оценивается утилизация одного буффера.
|
|
input_buffer
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicBufferStateManagerSpec::TOneSideBufferSpec>
Значение по умолчанию: {}
Настройки входного буффера.
|
|
output_buffer
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicBufferStateManagerSpec::TOneSideBufferSpec>
Значение по умолчанию: {}
Настройки выходного буффера.
|
|
enable_v2
|
Тип: bool
Значение по умолчанию: true
Включает v2-стратегию сайзинга буфферов: лимит = пик используемого + headroom, с полом v2_gain_epochs × demand × epoch (bandwidth-delay product). Потолок demand × max_duration поднимается до анонсированного input-backlog'а или, для производящего output, до равной доли половины fair_share_pool, поскольку эпохи продюсера не показывают период подтверждений downstream. Лимиты, подтверждённые спросом, распределяются раньше спекулятивных output-probe. Суммарно Σ(лимитов) ≤ fair_share_pool с учётом чужого in-flight; job_limit остаётся границей одного стрима. Стримы с job_overrides живут целиком вне пула (как в v1): память воркера под буфферы стоит закладывать как fair_share_pool + сумма фактического in-flight оверрайднутых стримов. По умолчанию включено; установите false, чтобы использовать прежнюю v1-формулу.
|
Дополнительные параметры
|
epoch_cycle_window_samples
|
Тип: int
Значение по умолчанию: 16
Число сэмплов в окне медианы длительности эпохи джобы.
|
|
max_rate_estimator_buckets
|
Тип: int
Значение по умолчанию: 8
Число бакетов в windowed-max оценщике скорости дрейна; изменение сбрасывает накопленную оценку.
|
|
warmup_refresh_period
|
Тип: TDuration
Значение по умолчанию: 30s
Как часто джоба опрашивает сошедшийся warmup для персиста.
|
|
v2_gain_epochs
|
Тип: double
Значение по умолчанию: 2.0
Целевой пол буфера в единицах эпох: сколько эпох спроса держать как минимум (запас на всплески скорости и latency). Действует только при enable_v2.
|
|
v2_use_offered_rate
|
Тип: bool
Значение по умолчанию: true
Учитывать ли в оценке спроса скорость по анонсированному backlog'у (offered rate). Можно выключить, если продюсер завышает анонсированный backlog. Действует только при enable_v2.
|
|
v2_floor
|
Тип: NYT::NYTree::TSize
Значение по умолчанию: 2Mi
Минимальный грант стриму с непустым backlog'ом; должен вмещать самое большое сообщение. Действует только при enable_v2.
|
|
v2_headroom_growth_factor
|
Тип: double
Значение по умолчанию: 2.0
Во сколько раз растёт headroom за один тик менеджера, пока утилизация высокая. Действует только при enable_v2.
|
|
v2_high_utilization_threshold
|
Тип: double
Значение по умолчанию: 0.65
Порог утилизации, выше которого headroom растёт, а ниже половины — затухает. Действует только при enable_v2.
|
|
v2_publish_threshold
|
Тип: double
Значение по умолчанию: 0.25
Не публиковать новый лимит, если он отличается от текущего меньше чем на эту долю (антиосцилляция); сжатия публикуются всегда. Действует только при enable_v2.
|
Все размерные (измеряемые в количестве элементов или в байтах) параметры в этом конфиге могут парситься из строк вида "50K".
ControllerConnector
Конфиг управления соединением воркера и контроллера.
Не рекомендуется менять без необходимости.
Источник: yt/yt/flow/library/cpp/common/spec.h
|
Параметр
|
Описание
|
|
controller_wait_timeout
|
Тип: TDuration
Значение по умолчанию: 5m
Время, через которое воркер принудительно отключит все джобы в случае потери связи с контроллером.
|
|
controller_discover_period
|
Тип: TDuration
Значение по умолчанию: 10s
Период повторного поиска контроллера.
|
|
controller_heartbeat_period
|
Тип: TDuration
Значение по умолчанию: 1s
Период хартбитов воркера в контроллер.
|
|
worker_statistics_report_period
|
Тип: TDuration
Значение по умолчанию: 30s
|
|
controller_heartbeat_rpc_timeout
|
Тип: TDuration
Значение по умолчанию: 10s
Таймаут хартбита.
|
|
controller_heartbeat_failure_backoff
|
Тип: TDuration
Значение по умолчанию: 1s
Время выдержки на случай ошибки рукопожатия.
|
|
controller_handshake_rpc_timeout
|
Тип: TDuration
Значение по умолчанию: 10s
Таймаут рукопожатия.
|
|
controller_handshake_failure_backoff
|
Тип: TDuration
Значение по умолчанию: 1s
|
|
orchid_update_period
|
Тип: TDuration
Значение по умолчанию: 1s
Период обновления orchid на контроллере.
|
Parameters
Поле parameters есть в спеках Computation, Source, Sink и Resource. Оно содержит параметры выбранной встроенной реализации, например адаптера process function. Проверяйте доступные поля в документации конкретного класса и не используйте этот блок для параметров пользовательской логики.
Параметры C++ process function задаются отдельно в processing_function_parameters. Объявите для них обычный yson struct, зарегистрируйте тип вместе с функцией и читайте параметры через runtime-контекст:
struct TMyParameters
: public NYTree::TYsonStruct
{
i64 Threshold;
REGISTER_YSON_STRUCT(TMyParameters);
static void Register(TRegistrar registrar);
};
YT_FLOW_DEFINE_PROCESS_FUNCTION(TMyFunction, TMyParameters);
"processing_function_parameters" = {
"threshold" = 10;
};
Статические параметры доступны в Init через initContext->GetParameters<TMyParameters>(), динамические — через context->GetDynamicParameters<TMyParameters>(). Подробнее см. в разделе Process function.
Config
Конфиг ноды кластера Flow.
Источник: yt/yt/flow/library/cpp/runner/config.h
|
Параметр
|
Описание
|
|
logging
|
Тип: NYT::TIntrusivePtr<NYT::NLogging::TLogManagerConfig>
Значение по умолчанию:
{
"high_backlog_watermark" = 100000;
"low_backlog_watermark" = 100000;
"min_disk_space" = 0;
"rules" = [
{
"exclude_categories" = [];
"max_level" = "maximum";
"min_level" = "info";
"writers" = [
"Stderr";
];
};
];
"writers" = {
"Stderr" = {
"common_fields" = {};
"enable_host_field" = %false;
"enable_native_tags" = %false;
"enable_source_location" = %false;
"enable_span_id_field" = %false;
"enable_system_fields" = %true;
"format" = "plain_text";
"type" = "stderr";
"yson_format" = "text";
};
};
}
Настройки логирования.
|
|
jaeger
|
Тип: NYT::TIntrusivePtr<NYT::NTracing::TJaegerTracerConfig>
Значение по умолчанию: {}
|
|
pipe_io_dispatcher
|
Тип: NYT::TIntrusivePtr<NYT::NPipeIO::TPipeIODispatcherConfig>
Значение по умолчанию: {}
|
|
solomon_registry
|
Тип: NYT::TIntrusivePtr<NYT::NProfiling::TSolomonRegistryConfig>
Значение по умолчанию: {}
|
|
error_backtrace_enricher
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TBacktraceEnricherSpec>
Значение по умолчанию: {}
|
|
query_engine_config
|
Тип: NYT::TIntrusivePtr<NYT::NQueryClient::TQueryEngineConfig>
Значение по умолчанию: {}
|
|
cluster_url
|
Тип: std::string
Обязательный параметр
Кластер YTsaurus для работы.
|
|
path
|
Тип: TString
Обязательный параметр
Рабочая папка пайплайна на кластере cluster_url.
|
|
proxy_role
|
Тип: std::optional<std::string>
Роль rpc proxy.
|
|
rpc_port
|
Тип: int
Значение по умолчанию: 0
Основной порт для общения воркеров и контроллеров, может быть отдельным у каждого инстанса.
|
|
monitoring_port
|
Тип: int
Значение по умолчанию: 0
API для получения метрик.
|
|
companion
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::NCompanion::TCompanionConfig>
Параметры процесса-компаньона. Нужны любому воркеру, который запускает компаньон (Python, Java, Go, C++-компаньон). В vanilla-запуске заполняются автоматически.
|
|
controller
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::NController::TControllerConfig>
Значение по умолчанию: {}
Параметры Controller.
|
|
worker
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::NWorker::TWorkerConfig>
Значение по умолчанию: {}
Параметры Worker.
|
|
authenticator
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TAuthenticatorConfig>
Значение по умолчанию: {}
|
|
bus_server
|
Тип: NYT::TIntrusivePtr<NYT::NBus::NTcp::TBusServerConfig>
Значение по умолчанию: {}
|
|
rpc_server
|
Тип: NYT::TIntrusivePtr<NYT::NRpc::TServerConfig>
Значение по умолчанию: {}
|
|
core_dumper
|
Тип: NYT::TIntrusivePtr<NYT::NCoreDump::TCoreDumperConfig>
|
|
solomon_exporter
|
Тип: NYT::TIntrusivePtr<NYT::NProfiling::TSolomonExporterConfig>
Значение по умолчанию: {'enable_solomon_aggregates': true}
|
|
solomon_proxy
|
Тип: NYT::TIntrusivePtr<NYT::NProfiling::TSolomonProxyConfig>
Значение по умолчанию: {}
|
|
http_client_config
|
Тип: NYT::TIntrusivePtr<NYT::NHttp::TClientConfig>
Значение по умолчанию: {}
|
|
https_client_config
|
Тип: NYT::TIntrusivePtr<NYT::NHttps::TClientConfig>
Значение по умолчанию: {}
|
|
http_poller_threads
|
Тип: int
Значение по умолчанию: 1
|
|
abort_on_unrecognized_options
|
Тип: bool
Значение по умолчанию: true
При выставлении значения true Flow Node не будет запускаться при наличии неизвестных опций в конфиге.
|
|
ignore_singletons_dynamic_config
|
Тип: bool
Значение по умолчанию: false
|
|
enable_porto_resource_tracker
|
Тип: bool
Значение по умолчанию: true
|
Дополнительные параметры
Controller
Источник: yt/yt/flow/library/cpp/controller/config.h
|
Параметр
|
Описание
|
|
controller_threads
|
Тип: int
Значение по умолчанию: 5
Число тредов.
|
|
orchid_update_period
|
Тип: TDuration
Значение по умолчанию: 1s
Период пересчёта orchid.
|
|
warm_up_time
|
Тип: TDuration
Значение по умолчанию: 5s
Период разогрева при старте контроллера.
|
|
scheduler_period
|
Тип: TDuration
Значение по умолчанию: 5s
Период запуска планировщика.
|
|
cache_period
|
Тип: TDuration
Значение по умолчанию: 1s
|
|
feedback_period
|
Тип: TDuration
Значение по умолчанию: 1s
|
|
metrics_period
|
Тип: TDuration
Значение по умолчанию: 5s
|
|
write_own_retryable_errors_period
|
Тип: TDuration
Значение по умолчанию: 5s
|
|
publish_retry_period
|
Тип: TDuration
Значение по умолчанию: 5s
Период, в течение которого контроллер пытается передать в YTsaurus информацию, что является лидером.
|
|
publish_timeout
|
Тип: TDuration
Значение по умолчанию: 2h
|
|
election_manager
|
Тип: NYT::NYTree::TPolymorphicYsonStruct<NYT::NYTree::NDetail::TPolymorphicMapping<&NYT::NFlow::NController::ElectionBackendDiscriminator.<char const at offset 0>, NYT::NFlow::NController::EElectionBackend, NYT::NYTree::NDetail::TOptionalValue<NYT::NFlow::NController::EElectionBackend, (NYT::NFlow::NController::EElectionBackend)0>, NYT::NFlow::NController::TElectionBackendConfigBase, NYT::NYTree::NDetail::TLeafTag<(NYT::NFlow::NController::EElectionBackend)0, NYT::NFlow::NController::TCypressElectionBackendConfig>, NYT::NYTree::NDetail::TLeafTag<(NYT::NFlow::NController::EElectionBackend)1, NYT::NFlow::NController::TDyntableElectionBackendConfig>, NYT::NYTree::NDetail::TLeafTag<(NYT::NFlow::NController::EElectionBackend)2, NYT::NFlow::NController::TChaosElectionBackendConfig>>>
Значение по умолчанию:
{
"backend" = "cypress";
"leader_cache_update_period" = 1000;
"leader_lease_ping_period" = 1000;
"leader_lease_ttl" = 5000;
"lock_acquisition_period" = 1000;
}
Настройки выбора лидера среди нескольких контроллеров.
|
|
persisted_state_manager
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::NController::TPersistedStateManagerConfig>
Значение по умолчанию: {}
Настройки PersistedStateManager.
|
|
lease_manager
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::NController::TLeaseManagerConfig>
Значение по умолчанию: {}
Настройки LeaseManager.
|
|
controller_service
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::NController::TControllerServiceConfig>
Значение по умолчанию: {}
Настройки ControllerService.
|
|
bus
|
Тип: NYT::TIntrusivePtr<NYT::NBus::NTcp::TBusConfig>
Значение по умолчанию: {}
|
Дополнительные параметры
|
publish_request_timeout
|
Тип: TDuration
Значение по умолчанию: 1s
Таймаут одного запроса попытки публикации. Неудачная попытка повторяется, так что этот параметр определяет только то, как долго одна попытка может висеть до повтора.
|
PersistedStateManager
Источник: yt/yt/flow/library/cpp/controller/config.h
|
Параметр
|
Описание
|
|
timeout
|
Тип: TDuration
Значение по умолчанию: 5s
Таймаут сохранения в YTsaurus.
|
|
max_reads_per_transaction
|
Тип: long
Значение по умолчанию: 10000
|
|
max_writes_per_transaction
|
Тип: long
Значение по умолчанию: 10000
|
LeaseManager
Источник: yt/yt/flow/library/cpp/controller/config.h
|
Параметр
|
Описание
|
|
lease_timeout
|
Тип: TDuration
Значение по умолчанию: 10m
Сколько джоба остаётся отгороженной без обновления фенса контроллером. С кипарисным бэкендом выборов это таймаут мастер-транзакции лиза джобы, с хаосным — таймаут его хаос-лиза, с дин-табличным — время жизни общей для пайплайна строки дедлайна, через которую проходит каждый коммит воркера.
|
|
lease_ping_period
|
Тип: TDuration
Значение по умолчанию: 30s
Период, с которым лидер продлевает лизы. Продлевает всегда лидер, а не воркер, но механика у бэкендов разная: хаосные лизы пингует один периодик, кипарисные — по клиентскому пингеру на транзакцию лиза, а общий дин-табличный дедлайн просто переписывается.
|
|
max_concurrent_requests
|
Тип: long
Значение по умолчанию: 500
Максимальное количество одновременных запросов, которые менеджер держит в полёте при прицеплении лизов и их прекращении. Не увеличивайте, чтобы избежать перегрузки мастера. На продление не распространяется: хаосные пинги рассылаются одним раундом без ожидания, а кипарисные принадлежат самим транзакциям лизов.
|
ControllerService
Источник: yt/yt/flow/library/cpp/controller/config.h
|
Параметр
|
Описание
|
|
set_spec_retry_count
|
Тип: int
Значение по умолчанию: 3
Количество попыток обновления спеки в случае ошибок.
|
|
set_spec_retry_period
|
Тип: TDuration
Значение по умолчанию: 5s
Время между попытками.
|
|
tables_throttler
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TLoadThroughputThrottlerSpec>
Значение по умолчанию: {}
|
Плюс небольшой запас для кейса, что в некоторые живые партиции тоже не будет записи.
Runner config
Конфиг для запуска пайплайна. Формат этого конфига не регламентирован, пользователь может использовать такой конфиг, какой удобнее для его задач.
Flow предоставляет простой вариант этого конфига NYT::NFlow::TSimpleRunnerConfig и программу NYT::NFlow::TSimpleRunnerProgram для запуска пайплайна с использованием этого конфига. И именно на такой формат конфига рассчитывает тестовый фреймворк Flow, чтобы подставить в него кластер и путь к пайплайну в локальном YTsaurus и чтобы применить тестовые дефолтные параметры для более быстрой работы теста.
SimpleRunnerConfig
Источник: yt/yt/flow/library/cpp/runner/simple_runner_program.h
|
Параметр
|
Описание
|
|
logging
|
Тип: NYT::TIntrusivePtr<NYT::NLogging::TLogManagerConfig>
Значение по умолчанию:
{
"high_backlog_watermark" = 100000;
"low_backlog_watermark" = 100000;
"min_disk_space" = 0;
"rules" = [
{
"exclude_categories" = [];
"max_level" = "maximum";
"min_level" = "info";
"writers" = [
"Stderr";
];
};
];
"writers" = {
"Stderr" = {
"common_fields" = {};
"enable_host_field" = %false;
"enable_native_tags" = %false;
"enable_source_location" = %false;
"enable_span_id_field" = %false;
"enable_system_fields" = %true;
"format" = "plain_text";
"type" = "stderr";
"yson_format" = "text";
};
};
}
Настройки логирования.
|
|
jaeger
|
Тип: NYT::TIntrusivePtr<NYT::NTracing::TJaegerTracerConfig>
Значение по умолчанию: {}
|
|
pipe_io_dispatcher
|
Тип: NYT::TIntrusivePtr<NYT::NPipeIO::TPipeIODispatcherConfig>
Значение по умолчанию: {}
|
|
solomon_registry
|
Тип: NYT::TIntrusivePtr<NYT::NProfiling::TSolomonRegistryConfig>
Значение по умолчанию: {}
|
|
error_backtrace_enricher
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TBacktraceEnricherSpec>
Значение по умолчанию: {}
|
|
query_engine_config
|
Тип: NYT::TIntrusivePtr<NYT::NQueryClient::TQueryEngineConfig>
Значение по умолчанию: {}
|
|
cluster_url
|
Тип: std::string
Обязательный параметр
Имя кластера, на котором находится пайплайн. Хвост после последнего / трактуется как прокси-роль и имеет приоритет над proxy_role — например, hahn/flow означает кластер hahn и роль flow.
|
|
proxy_role
|
Тип: std::optional<std::string>
Обязательный параметр
Прокси-роль, которую нужно использовать для выполнения операций над пайплайном.
|
|
path
|
Тип: TString
Обязательный параметр
Путь к пайплайну на YTsaurus.
|
|
spec
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TPipelineSpec>
Обязательный параметр
Статическая спека, с которой нужно запустить пайплайн.
|
|
dynamic_spec
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDynamicPipelineSpec>
Значение по умолчанию: {}
Динамическая спека, с которой нужно запустить пайплайн.
|
|
abort_on_unrecognized_options
|
Тип: bool
Значение по умолчанию: false
|
|
abort_on_specs_parseability_error
|
Тип: bool
Значение по умолчанию: false
|
|
vanilla
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TVanillaConfig>
Если задан и enable=%true, раннер вместо запуска контроллера/воркеров локально поднимет vanilla-операцию в YTsaurus и запустит федерацию в ней.
|
|
set_flow_core_target
|
Тип: bool
Значение по умолчанию: true
|
|
direct_controller_commands
|
Тип: NYT::TIntrusivePtr<NYT::NFlow::TDirectControllerCommandsConfig>
Значение по умолчанию: {}
|
Дополнительные параметры
См. также