Redis Streams consumer groups
Phân biệt pending, ACK và recovery với XAUTOCLAIM.
Nắm bản chất
Redis Streams lưu chuỗi messages có IDs. Consumer group theo dõi tiến độ và
Pending Entries List (PEL) cho những messages đã giao nhưng chưa ACK.
XREADGROUP đọc/claim messages trong group; XACK xác
nhận hoàn thành. XAUTOCLAIM hỗ trợ chuyển quyền xử lý những entries
bị bỏ dở dựa trên idle time.
Message delivery thường mang tính at-least-once. Consumer phải chịu được xử lý trùng, đặc biệt khi crash xảy ra giữa database commit và Redis ACK.
Luồng hoạt động
Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?
Lệnh & cấu hình mẫu
redis-cli XGROUP CREATE jobs workers 0 MKSTREAM
redis-cli XADD jobs '*' job_id 123
redis-cli XREADGROUP GROUP workers c1 COUNT 1 STREAMS jobs '>'
redis-cli XINFO GROUPS jobs
# XACK cần đúng message ID được nhận
Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.
Bài tập 10–20 phút
Trong lab Buổi 12, dừng Worker giữa chừng rồi restart. Quan sát pending messages và giải thích thời điểm một message được ACK.
Lỗi dễ mắc
Redis Streams không tự đảm bảo mọi external side effect exactly-once; thiết kế idempotency ở application/database boundary.
Tự kiểm tra
Tại sao Worker không nên ACK trước khi ghi kết quả?Xem đáp án ↗
Vì nếu process crash sau ACK nhưng trước commit, công việc có thể bị mất khỏi cơ chế retry của consumer group.
Học thêm qua lab
Có project thực hành đúng với chương này, kèm README và những giới hạn môi trường cần lưu ý.
↓ Tải mã nguồn thực hành chương 12Đối chiếu tài liệu gốc
Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.
Mở tài liệu chính thức ↗