0
0
Redisquery~10 mins

Consumer groups concept in Redis - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Consumer groups concept
Messages added to stream
Create consumer group
Consumers read messages
Messages assigned to consumers
Consumers acknowledge messages
Pending messages tracked
Reassign unacknowledged messages if needed
Messages enter a stream, a consumer group is created, consumers read and acknowledge messages, and pending messages are tracked for reliability.
Execution Sample
Redis
XGROUP CREATE mystream mygroup 0
XREADGROUP GROUP mygroup Alice COUNT 2 STREAMS mystream >
XACK mystream mygroup 1526985058136-0
Create a consumer group, read messages as a consumer, then acknowledge processed messages.
Execution Table
StepActionInput/CommandResult/State ChangeOutput
1Add messages to streamXADD mystream * name AliceMessage added with ID 1526985058136-01526985058136-0
2Create consumer groupXGROUP CREATE mystream mygroup 0Group 'mygroup' created starting from the first messageOK
3Consumer reads messagesXREADGROUP GROUP mygroup Alice COUNT 2 STREAMS mystream >Consumer 'Alice' assigned new messagesMessages with IDs 1526985058136-0
4Consumer acknowledges messageXACK mystream mygroup 1526985058136-0Message marked as processed, removed from pending1
5Check pending messagesXPENDING mystream mygroupNo pending messages for 'Alice'Empty list
6ExitNo more messagesNo new messages to assignEnd of processing
💡 No new messages available, consumer group processing ends
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
Stream 'mystream'empty1 message (1526985058136-0)1 message1 message assigned to Alice1 message acknowledged (removed from pending)1 message in stream, none pending
Consumer group 'mygroup'nonenonecreatedactive with Alice assigned messagemessage acknowledgedactive, no pending messages
Pending messagesnonenonenone1 message pending for Alice0 pending0 pending
Key Moments - 3 Insights
Why does the consumer group start reading from '0' when created?
Starting from '0' means the group reads messages from the beginning of the stream, as shown in Step 2 and Step 3 of the execution_table.
What happens if a consumer does not acknowledge a message?
The message stays in the pending list (Step 4 and 5), so it can be reassigned or retried later, ensuring no message is lost.
Why do we use '>' in the XREADGROUP command?
'>' tells Redis to deliver only new messages that were never delivered to any consumer, as seen in Step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the state of pending messages after Step 3?
AOne message pending for consumer Alice
BNo pending messages
CAll messages acknowledged
DPending messages for multiple consumers
💡 Hint
Check the 'Result/State Change' column in Step 3 and Step 4
At which step does the consumer group get created?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look for the 'Create consumer group' action in the execution_table
If the consumer never acknowledges messages, what would happen to the pending messages?
AThey get deleted immediately
BThey remain pending and can be reassigned
CThey are delivered to other consumers instantly
DThey disappear from the stream
💡 Hint
Refer to the key_moments explanation about unacknowledged messages
Concept Snapshot
Consumer groups let multiple consumers share a stream.
Create a group with XGROUP CREATE.
Consumers read with XREADGROUP using '>' for new messages.
Consumers acknowledge messages with XACK.
Pending messages track unacknowledged messages.
This ensures reliable, distributed message processing.
Full Transcript
In Redis streams, messages are added to a stream. A consumer group is created to allow multiple consumers to read from the stream without duplicating work. When a consumer reads messages using XREADGROUP with the '>' symbol, it receives new messages not yet delivered to any consumer. After processing, the consumer acknowledges messages with XACK, removing them from the pending list. Pending messages are tracked to handle cases where consumers fail to acknowledge, allowing reassignment and ensuring no message is lost. This flow supports reliable and scalable message consumption.