CDC replay vs application-level replay¶
Тип материала: инженерное сравнение. Выводы зависят от workload и failure model; схема и сценарии иллюстративные.
Проверка источников: 2026-11-02. Численные latency, throughput, cost и SLA не измерялись.
Критерии выбора¶
| Критерий | CDC replay | Application-level replay |
|---|---|---|
| Workload | Восстановление row/change projections | Повтор доменных фактов либо commands |
| Consistency | Source log positions, snapshot markers, source order | Domain identity, revision и business rule version |
| Latency / throughput | Зависит от WAL retention и snapshot cost | Зависит от архива, side effects и replay isolation |
| Cost / scalability | Slots/log retention и source I/O | Event archive, historical handlers, separate generations |
| Operational complexity | Connector state, schema history и gaps | Commands vs facts, idempotency и external effects |
Механизм и ограничения¶
CDC records описывают изменения хранения; они не обязаны содержать исходное business intent. Application replay может означать rebuild projection из фактов либо повтор command handler — это разные риски. Повторить PaymentPosted в reporting безопаснее, чем повторить команду Pay без внешнего idempotency protocol.
Snapshot event не является новым фактом о дополнительной оплате. При CDC restart сохраняйте connector offsets, slot, snapshot status и schema/decoder state. В application replay сохраняйте original operation/event IDs и обозначайте code/rule version. Raw transport offset не заменяет domain identity.
Иллюстративная схема решения¶
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¶
При log gap нельзя обещать восстановление только restart connector: нужна процедура resnapshot/reconciliation. При rebuild в новую generation нельзя использовать старый глобальный inbox так, чтобы он пропустил все нужные события. При command replay требуется отдельно выключить/guard external side effects.
Практическое упражнение¶
Сравните G: snapshot restart с A: replay. Укажите, какие IDs допустимы для dedup, что означает snapshot read и когда требуется новый source cut.
Связанные материалы и источники¶
- Debezium PostgreSQL — 3.3.
- Kafka 4.1 design — 4.1.