At-least-once + idempotency vs exactly-once processing¶
Тип материала: инженерное сравнение. Выводы зависят от workload и failure model; схема и сценарии иллюстративные.
Проверка источников: 2026-11-02. Численные latency, throughput, cost и SLA не измерялись.
Критерии выбора¶
| Критерий | At-least-once + sink idempotency | Engine exactly-once |
|---|---|---|
| Workload | Внешняя DB/projection с durable identity | Часто одна поддерживаемая engine/transport область |
| Consistency | Один эффект в заданной sink transaction | Согласованный committed state/output при connector contract |
| Latency / throughput | Повторный lookup/constraint; contention hot keys | Checkpoint/transaction overhead и длительность commit |
| Cost / scalability | Inbox storage и retention; sharding по identity domain | State/checkpoint storage; coordination с sink |
| Operational complexity | Payload conflicts, replay horizon, restore marker/effect | Connector versions, timeout, recovery pending transactions |
Механизм и ограничения¶
Выбирайте sink idempotency, если identity можно сохранить атомарно с эффектом, включая response. Exactly-once engine полезен, когда source/state/output поддерживают coordinated recovery, но не распространяется на произвольный HTTP side effect. Эти подходы сочетаются: engine уменьшает повторы в своей области, durable sink guard защищает business boundary.
INFERENCE: для Kafka→PostgreSQL wallet projection обычно проще доказать inbox/effect transaction, чем пытаться присоединить БД к Kafka transaction. Для Kafka→Kafka агрегации Kafka EOS может быть естественным contract. Ни один вариант не доказывает absence of semantic bugs в расчёте.
Иллюстративная схема решения¶
flowchart TD
W[Workload and invariant] --> B[Define durable boundary]
B --> F[Compare failure and recovery obligations]
F --> L[Choose protocol for explicit scope]
L --> T[Fault test and reconciliation]
Failure и recovery¶
Crash после sink commit требует повторного lookup в первом варианте; rollback checkpoint во втором требует replay и корректного sink commit protocol. При потере target storage оба требуют согласования restored source frontier и durable effect. Применяйте финансовую сверку независимо от выбора.
Практическое упражнение¶
Разберите A и C. Выпишите для каждого эффекта authority, identity, retention и доказательство recovery. Отметьте, какие условия являются NOT_RUN.
Связанные материалы и источники¶
- Kafka 4.1 design — 4.1.
- Flink fault tolerance — 1.20.3.