1. Mở đầu
Mặc định, định danh của một consumer như là thành viên của consumer group là tạm thời. Khi các consumer rời khỏi consumer group, các partition đã được phân bổ cho consumer đó sẽ bị thu hồi, và khi nó gia nhập lại, nó sẽ được cấp một ID thành viên mới và một tập hợp partition mới thông qua giao thức rebalance.
2. Phân tích
Tất cả điều này là đúng trừ khi chúng ta cấu hình một consumer với group.instance.id
duy nhất, điều này làm cho consumer trở thành thành viên cố định của nhóm. Khi một consumer lần đầu gia nhập vào consumer group với tư cách là thành viên cố định của nhóm, nó sẽ được phân bổ một tập hợp các partition theo chiến lược phân bổ partition mà nhóm đang sử dụng, như bình thường. Tuy nhiên, khi consumer này ngừng hoạt động, nó không tự động rời khỏi nhóm—nó vẫn là thành viên của nhóm cho đến khi phiên làm việc của nó hết hạn. Khi consumer gia nhập lại nhóm, nó sẽ được nhận diện với danh tính cố định của nó và được phân bổ lại các partition mà nó đã giữ trước đó mà không kích hoạt rebalance. Group coordinator lưu trữ phân bổ cho từng thành viên của nhóm không cần kích hoạt rebalance mà chỉ cần gửi phân bổ đã lưu vào bộ nhớ đệm cho thành viên cố định gia nhập lại.
Nếu hai consumer gia nhập cùng một nhóm với cùng một group.instance.id
, consumer thứ hai sẽ nhận được lỗi thông báo rằng một consumer với ID này đã tồn tại.
Tình trạng thành viên cố định của nhóm là hữu ích khi ứng dụng của bạn duy trì trạng thái cụ bộ hoặc bộ nhớ đệm được lấp đầy bởi các partition được phân bổ cho từng consumer. Khi việc tái tạo bộ nhớ đệm này mất nhiều thời gian, bạn không muốn quá trình này xảy ra mỗi khi một consumer khởi động lại. Ngược lại, điều quan trọng là phải nhớ rằng các partition thuộc về từng consumer sẽ không được phân bổ lại khi một consumer được khởi động lại. Trong một khoảng thời gian nhất định, không có consumer nào sẽ tiêu thụ các message từ những partition này, và khi consumer cuối cùng khởi động lại, nó sẽ bị tụt lại phía sau so với các message mới nhất trong các partition này. Chúng ta nên chắc chắn rằng consumer sở hữu các partition này sẽ có thể bắt kịp với độ trễ sau khi khởi động lại.
3. Lưu ý
Điều quan trọng cần lưu ý là các thành viên cố định của consumer group không chủ động rời khỏi nhóm khi họ ngừng hoạt động, và việc phát hiện khi nào họ "thực sự biến mất" phụ thuộc vào cấu hình session.timeout.ms
. Chúng ta nên thiết lập giá trị này đủ cao để tránh kích hoạt rebalance khi ứng dụng khởi động lại đơn giản, nhưng cũng đủ thấp để cho phép tự động phân bổ lại các partition của họ khi có thời gian ngừng hoạt động đáng kể, nhằm tránh các khoảng trống lớn trong việc xử lý các partition này.
4. Thông tin kết nối
Nếu anh em muốn trao đổi thêm về bài viết, hãy kết nối với mình qua LinkedIn và Facebook:
- LinkedIn: https://www.linkedin.com/in/nguyentrungnam/
- Facebook: https://www.facebook.com/trungnam.nguyen.395/
Rất mong được kết nối và cùng thảo luận!