At-least-once. An event is redelivered until a consumer acknowledges it, so a
consumer that crashes mid-handler sees it again. Consumers must be
idempotent — :id is assigned by the publisher, so it is stable across
redeliveries.
Each Redis poll cycle reclaims entries abandoned by consumers that are not
coming back, retries this consumer’s own unacknowledged ones, then waits for
new. After :max-deliveries attempts an event is written to <stream>:dead
and acknowledged, so one poison event cannot stall its topic.
Consumer groups split work between processes. Every event goes to exactly one
member of a group, and to every group — so two services that both need every
event need two groups. Within one process every subscribe! on a topic
receives every event.
Ordering is per topic. Two topics have no relative order.