Timeliness ≠ Integrity: Splitting “consistency” in Two
ACID “consistency” conflates two things · event-based dataflow systems decouple them
ACID consistency (the overloaded word)
up-to-date?
uncorrupted?
Timeliness — users see up-to-date state
linearizability (CAP sense) = strongest form
read-after-write = weaker form
violation →
TEMPORARY
: wait + retry fixes it
stale read heals by itself (eventual consistency)
e.g. card tx missing 24h from statement:
annoying, but normal
Integrity — no corruption, no loss
no loss, no contradictions, derivation correct
index must reflect the table (missing = useless)
violation →
PERMANENT
: explicit check + repair
e.g. balance ≠ sum of txs, money disappearing:
catastrophic
the slogan
timeliness violations are allowed under eventual consistency; integrity violations are perpetual inconsistency
timeliness in dataflow
no guarantee by default (async consumers)
a client CAN wait for its own output event
e.g. outgoing-payment / declined event
…but the balance check never waits on it
notification is decoupled from the effect
integrity in dataflow — 4 mechanisms
① write = ONE atomic message (event sourcing)
② deterministic derivation functions
③ client request ID thru all stages (e2e dedup)
④ immutable msgs + reprocessing (bug recovery)
= effectively-once without 2PC / XA
Verdict
preserve integrity without distributed transactions → comparable correctness, better performance + robustness
legend — amber: the overloaded word · teal/blue: the two meanings · banner: the slogan · bottom: how dataflow delivers each