1. Giới thiệu
Trong hệ sinh thái Kafka, mỗi consumer được xác định là thành viên của một consumer group với một định danh tạm thời theo mặc định. Khi các consumer không còn hoạt động trong nhóm, các partition mà họ đã giữ sẽ bị thu hồi và phân bổ lại cho những consumer khác. Khi consumer gia nhập lại, họ sẽ nhận một ID thành viên mới cùng với một tập hợp partition mới thông qua quá trình tái cân bằng (rebalance).
2. Phân tích Định Danh Cố Định
Tuy nhiên, có một cách để thay đổi quy tắc này bằng cách cấu hình consumer với group.instance.id
duy nhất. Điều này giúp cho consumer trở thành thành viên cố định của nhóm. Khi một consumer khởi động lần đầu hoặc gia nhập nhóm với định danh cố định, nó sẽ được phân bổ một tập hợp các partition theo chiến lược phân bổ mà nhóm đang áp dụng.
Khi consumer này không hoạt động, nó không rời khỏi nhóm ngay lập tức; nó vẫn giữ vị trí của mình cho đến khi thời gian phiên làm việc hết hạn. Khi consumer trở lại, nó sẽ được nhận diện bằng ID cố định của mình và được phân bổ lại các partition mà nó đã sở hữu trước đó mà không cần phải thực hiện quá trình rebalance. Nhóm điều phối (group coordinator) sẽ lưu trữ phân bổ cho từng thành viên mà không cần thực hiện tái cân bằng, chỉ cần gửi lại phân bổ đã lưu cho những member cố định khi họ trở lại.
Nếu có 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 thông báo lỗi rằng ID này đã có sẵn trong nhóm.
3. Lợi ích và Lưu ý Khi Sử Dụng Thành Viên Cố Định
Trạng thái thành viên cố định mang lại lợi ích lớn khi ứng dụng của bạn giữ trạng thái cục bộ hoặc bộ nhớ đệm thông qua các partition được phân bổ cho từng consumer. Trong những trường hợp mà việc tái tạo bộ nhớ đệm kéo dài, điều này sẽ giúp giảm thiểu chi phí khởi động lại. Tuy nhiên, người dùng cần cân nhắc rằng các partition không được phân bổ lại cho đến khi consumer khởi động lại. Trong khoảng thời gian đó, việc tiêu thụ message sẽ tạm dừng, và consumer có thể bị bỏ lại phía sau so với những message mới trong các partition này. Do đó, bạn cần đảm bảo rằng consumer có thể bắt kịp với độ trễ khi khởi động lại.
4. Thông tin quan trọng
Một điều cần lưu ý là những thành viên cố định trong consumer group sẽ không tự động rời khỏi nhóm khi không còn hoạt động. 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
. Bạn nên thiết lập giá trị này để đủ cao nhằm ngăn chặn việc kích hoạt rebalance khi ứng dụng chỉ tạm dừng, nhưng đồng thời cũng phải đủ thấp để tự động quá trình phân bổ lại các partition khi có thời gian ngừng hoạt động đáng kể, giúp tránh những khoảng trống lớn trong việc xử lý dữ liệu từ các partition.
5. Kết nối và Hỗ trợ
Nếu bạn muốn trao đổi thêm về chủ đề này hoặc có bất kỳ câu hỏi nào, hãy kết nối với tôi 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 về những vấn đề thú vị trong thế giới Kafka!
source: viblo