Comparison
Stream-table dualityvsTombstone record
Stream-table duality
the same topic can be read as a log of every change or collapsed into a table of current values, and which one you want depends on the question.
The observation that a table is the accumulated result of a stream of changes, and a stream is the sequence of differences between successive tables. It stops being an abstraction the first time you need current state from a change feed, or history from a snapshot table, and it is the idea behind compacted topics and materialised streaming views. Naming it is what makes 'should this be a table or a topic' answerable rather than stylistic.
Full entry →Tombstone record
the delete arrives as a message with a key and no body, and a consumer that skips empty payloads keeps the row forever.
A record whose presence means 'this key no longer exists' — typically a key with a null value on a compacted topic. It is how deletion survives a system built out of upserts, and it is how compaction and downstream stores learn to drop something. Consumers written against the happy path routinely ignore them, which is the mechanism behind deleted customers who are still in the dashboard a year later.
Full entry →