---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.3
alternate:
  - https://ytsaurus.tech/docs/en/flow/concepts/lineage.md
  - https://ytsaurus.tech/docs/ru/flow/concepts/lineage.md
  - href: https://ytsaurus.tech/docs/ru/flow/concepts/lineage.md
    type: text/markdown
    title: Markdown version
  - href: https://ytsaurus.tech/docs/ru/llms.txt?revision=181542d8c2d9f36be925894a517db8203cafae65
    rel: describedby
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt?revision=181542d8c2d9f36be925894a517db8203cafae65

<!-- source: ru/_includes/flow/concepts/lineage.md -->
# Lineage в YTsaurus Flow

Lineage *(с англ. родословная)* — это информация о том, из каких входных [сообщений](https://ytsaurus.tech/docs/ru/flow/concepts/glossary.md#message) и [таймеров](https://ytsaurus.tech/docs/ru/flow/concepts/glossary.md#timer) был получен конкретный выходной результат [компьютейшена](https://ytsaurus.tech/docs/ru/flow/concepts/glossary.md#computation). Эта информация используется фреймворком в момент обработки для вычисления метаданных и обеспечения гарантий порядка, но не сохраняется в самом выходном сообщении.

## Зачем нужен lineage {#why-lineage}

Lineage используется фреймворком в двух целях:

1. **Вычисление метаполей.** На основе родительских сообщений Flow автоматически заполняет метаполя выходных сообщений: `EventTimestamp`, `AlignmentTimestamp` и другие. Для Swift-компьютейшенов и [passthrough](https://ytsaurus.tech/docs/ru/flow/concepts/glossary.md#passthrough) `AlignmentTimestamp` наследуется от родителей без изменений — это гарантирует корректную [приоритизацию](https://ytsaurus.tech/docs/ru/flow/concepts/ordering.md) сообщений в downstream-компьютейшенах.

2. **Гарантии порядка производных сообщений.** Если у двух сообщений совпадают [ключи группировки](https://ytsaurus.tech/docs/ru/flow/concepts/glossary.md#key) по всей цепочке lineage от источника до текущего компьютейшена, то их относительный порядок обработки сохраняется. Подробнее — в разделе [Порядок обработки сообщений](https://ytsaurus.tech/docs/ru/flow/concepts/ordering.md#ordering-guarantees).

## Поведение по умолчанию {#default-behavior}

В большинстве случаев явно управлять lineage не нужно — фреймворк устанавливает родителей автоматически:

| Тип функции | Родитель выходного сообщения |
|---|---|
| `IProcessFunction::ProcessMessage` / `RowFunction` | текущее входное сообщение |
| `IBatchProcessFunction::Process` / `BatchFunction` | все сообщения текущего батча |
| Обработчик таймера | текущий таймер |

## Когда задавать lineage явно {#explicit-lineage}

По умолчанию родителем выходного сообщения считается весь текущий батч. Явный lineage позволяет сузить это множество до конкретного подмножества входных объектов, что делает вычисление `EventTimestamp` и `AlignmentTimestamp` более точным.

В Swift-компьютейшене сужение обязательно: у каждого выходного сообщения должен быть ровно один родитель (несколько — только при [`allow_batching_with_relaxed_guarantees`](https://ytsaurus.tech/docs/ru/flow/concepts/guarantees.md#swift-allow-batching-with-relaxed-guarantees)). При обработке по одному сообщению фреймворк назначает родителя автоматически; в batch-обработке его задаёт пользовательский код. В Transform-компьютейшене явный lineage необязателен.

## API {#api}

Lineage устанавливается через метод `SetParents` / `set_parent_ids` / `setParentIds` / `WithParentIDs` на объекте `OutputCollector`. Метод возвращает **новый** коллектор с привязанным контекстом lineage — все вызовы `AddMessage` / `add_message` / `addMessage` на нём будут нести этот lineage.

Подробнее об использовании в каждом языке:
- [C++](https://ytsaurus.tech/docs/ru/flow/cpp/process-functions.md)
- [Java](https://ytsaurus.tech/docs/ru/flow/java/computation.md#output-collector)
- [Python](https://ytsaurus.tech/docs/ru/flow/python/computation.md#output-collector)
- [Go](https://ytsaurus.tech/docs/ru/flow/go/computation.md#output-collector)

## Статистика преобразования {#conversion-statistics}

Flow оценивает отношение выхода ко входу для каждой пары потоков, отдельно по количеству сообщений и размеру в байтах. Статистика учитывает обработанные сообщения, а не гарантированно доставленные.

## См. также

- [Порядок обработки сообщений](https://ytsaurus.tech/docs/ru/flow/concepts/ordering.md)
- [Computation](https://ytsaurus.tech/docs/ru/flow/concepts/computation.md)
- [Основные понятия (глоссарий)](https://ytsaurus.tech/docs/ru/flow/concepts/glossary.md)
- [Computation (Go)](https://ytsaurus.tech/docs/ru/flow/go/computation.md)
<!-- endsource: ru/_includes/flow/concepts/lineage.md -->
