AnalysisOct 7, 20265 min read3 sources

Flow’s exactly-once promise ends at the connector boundary

YTsaurus Flow coordinates state and queue progress inside YTsaurus transactions, but a pipeline’s source and sink still determine whether that guarantee survives end to end. That boundary matters more than the headline throughput claim.

In one minute

YTsaurus Flow coordinates state and queue progress inside YTsaurus transactions, but a pipeline’s source and sink still determine whether that guarantee survives end to end. That boundary matters more than the headline throughput claim. YTsaurus Flow coordinates state and queue progress inside YTsaurus transactions, but a pipeline’s source and sink still determine whether that guarantee survives end to end. That

YTsaurus Flow coordinates state and queue progress inside YTsaurus transactions, but a pipeline’s source and sink still determine whether that guarantee survives end to end. That boundary matters more than the headline throughput claim.

Summary

Yandex has open-sourced YTsaurus Flow under Apache 2.0. The framework is used in Yandex Advertising, Market and anti-fraud systems; Yandex says Advertising processes more than 100 GB per second through Flow, and preparation of data for some model retraining fell from over ten hours to about two. The key engineering question is where its exactly-once guarantee holds: atomic coordination inside YTsaurus does not automatically make every external source and sink part of the same transaction.

What happened

Flow is designed for continuous, stateful data processing. According to the YTsaurus documentation cited in the dossier, it can keep keyed state in dynamic tables and coordinate that state with queue progress—offsets or message IDs—using epoch transactions. That shared transaction is intended to let recovery resume without losing or double-counting work within the coordinated system. But pipeline guarantees are only as strong as their edges: if a connector or external sink cannot participate in the same transaction or provide compatible idempotency, retries may still produce duplicates or leave a gap at that boundary. Yandex’s reported production use and performance make Flow worth evaluating, not a blanket proof of end-to-end exactly-once behavior.

What the archive adds

The archive’s relevant fragment is the same Yandex release, so it adds no independent adoption history. The dossier says YTsaurus documentation describes dynamic-table state, queue offsets or message IDs, and epoch transactions as parts of Flow’s coordination model; it also notes that connectors affect the guarantee. This context sharpens the issue: exactly-once is not a magic property of the processing loop, but a claim whose scope depends on which components share transactional or idempotent behavior.

Trend signal

Streaming systems make consistency claims at different boundaries. A framework can atomically advance internal state and input progress while still relying on connectors and destinations to handle retries safely. Flow’s open-source release puts a production implementation of that integrated approach within reach, but the important evaluation is not simply whether the code says exactly once. It is whether a particular source-to-state-to-sink path preserves the intended outcome under failure.

Why now

According to the primary evidence, Flow already runs in Yandex Advertising, Market and anti-fraud, giving Yandex a production system to open rather than a prototype. Yandex says Advertising processes more than 100 GB/s through Flow and that preparation for some model retraining fell from over ten hours to about two. According to the dossier’s YTsaurus documentation finding, the framework coordinates state and queue progress through YTsaurus transactions; that integrated mechanism is the technical basis of its internal consistency claim. Apache 2.0 makes inspection and experimentation possible, while connector behavior remains a practical determinant of end-to-end guarantees.

Connections to other events

The useful inference is that Flow’s exactly-once claim should be read as a boundary-specific contract. YTsaurus dynamic-table state, queue offsets or message IDs, and epoch transactions coordinate what the platform can update together. A failure after the source is read but before state and offset commit tests that internal coordination; a failure after processing but before an external sink confirms its write tests the connector boundary. If the sink retries without transactional participation or idempotency, the internal guarantee may not prevent duplicate output. The release therefore invites teams to map the guarantee across the whole path, not just inspect the framework’s processing semantics.

Why it matters

For builders, this turns evaluation into a concrete integration question: identify which state, offsets and writes Flow can transact together, then separately establish what each connector guarantees on retry. For buyers, Yandex’s claimed scale is evidence of use in its own environment, not a substitute for testing the exact source and destination in their own stack. Teams already using YTsaurus may find the integrated coordination model especially relevant; others should price in connector behavior and platform dependencies before treating Flow as a drop-in processor.

What happens next

  • Flow’s documentation or public project discussion will clarify exactly-once behavior for at least one concrete source-and-sink combination. (6 months, 65%). Watch for: A documentation update, issue discussion or reproducible test names a connector pair and describes its retry or failure semantics.
  • An external evaluation of Flow will publish a failure or recovery test involving state and queue progress rather than relying only on throughput claims. (12 months, 55%). Watch for: A non-Yandex user publishes a test, issue or deployment report showing behavior after an injected failure.

Limits and uncertainty

The >100 GB/s figure and the reduction in preparation time are claims from Yandex’s account, not independently verified comparisons in the supplied evidence. The evidence does not specify the behavior of every source and sink connector or prove end-to-end exactly-once semantics for arbitrary pipelines. A team whose connectors and destination already provide suitable transactional or idempotent behavior may face less boundary risk than this analysis suggests.

Skill to build now

Build a failure-boundary test for one real streaming job. This week, record the source read, Flow state update, offset or message-ID commit, and sink write; inject failures before and after each commit or acknowledgement, then verify whether recovery loses or duplicates output and which connector or transaction provides the guarantee.

Reader takeaway

This week, choose one representative pipeline and draw its source, Flow state, queue offset or message ID, and sink as separate commit boundaries. Test three failures: after reading but before the state-and-offset transaction commits; after that commit but before the sink acknowledges output; and after sink write but before the acknowledgement is recorded. Check whether recovery loses an event, emits a duplicate, or safely retries at each boundary, and document which component provides the protection.

Open question

For commonly used external sinks, which connector paths can preserve Flow’s intended exactly-once outcome through a crash and retry, and which require additional idempotency or transactional support from the destination?

Evidence / sources

  1. 1habr.com/ru/companies/yandex/articles/1087470
  2. 2habr.com/ru/articles/1084064
  3. 3github.com/bytedance/deer-flow
All Analysis

Next reads

Read next

Open the graph
  1. 01topicTrendsExplore the trends topic hub.
  2. 02archiveAnalysisOpen the latest authorial analysis.
  3. 03source ledgerSource LedgerInspect the public source evidence graph.
Who read this page?Machine requests, hidden until opened

Loading the privacy-safe route aggregate...

Open the JSON contract