Routing failed, so you didn't commit. The message was skipped anyway.
transcript
Routing a notification fails. So you don't commit its offset. It'll be retried, right? It won't. It's silently skipped.
The router commits offsets by hand. Read a message. Route it to its channels. And commit only after it succeeds. Sounds bulletproof.
Message 42 throws an error. The tempting fix: just don't commit it. But the consumer keeps going. Message 43 routes fine. 43 commits. And that commit moves right past 42. 42 is never read again. No error. A notification just vanished.
Not committing doesn't replay anything. So seek back. Rewind the consumer to the failed offset. Message 42 is read again, and retried. Still failing after a few attempts? Send it to a dead letter queue.
Same idea in the outbox. Rows 1 and 2 publish. Row 3 fails. Publish row 4 anyway? A user's events go out of order. So it stops, and retries row 3.
A failed message has to be re-read on purpose. Not committing isn't a retry. Seeking back is.
Full breakdown in the lecture.