1. Tổng Quan Về Bản Sao (Replica) Trong Kafka
Bản sao (replica) trong Kafka có thể được coi là đồng bộ nếu nó đáp ứng các điều kiện sau đây:
- Là leader của partition hoặc là bản sao follower với kết nối hoạt động tốt với ZooKeeper trong 6 giây qua (có thể cấu hình).
- Nhận message từ leader trong vòng 10 giây qua (có thể cấu hình).
- Nhận được các message mới nhất từ leader mà không bị trễ trong 10 giây qua.
Nếu bản sao mất kết nối với ZooKeeper hoặc không thể theo kịp leader, nó sẽ được coi là không đồng bộ. Khi kết nối được khôi phục, bản sao sẽ trở lại trạng thái đồng bộ nhanh chóng, miễn là broker của nó hoạt động bình thường.
2. Cấu Hình Quan Trọng Của Broker
Hệ Số Sao Chép (Replication Factor)
Hệ số sao chép (Replication Factor) được cấu hình ở mức topic (replication.factor) và broker (default.replication.factor). Ví dụ, nếu các topic có hệ số sao chép là 3, thì mỗi partition sẽ có ba bản sao phân phối trên ba broker khác nhau. Cấu hình này giúp đảm bảo tính khả dụng và tin cậy của dữ liệu, nhưng cần cân nhắc dung lượng lưu trữ.
Các Yếu Tố Cần Xem Xét Khi Xác Định Hệ Số Sao Chép:
- Tính Khả Dụng: Nhiều bản sao sẽ đảm bảo khả năng hoạt động liên tục cho partition.
- Độ Trễ Đầu Cuối: Càng nhiều bản sao, có thể dẫn đến độ trễ trong việc tiêu thụ dữ liệu.
- Chi Phí: Mỗi bản sao bổ sung sẽ làm tăng chi phí lưu trữ và mạng.
- Tính Bền Vững: Nhiều bản sao sẽ giảm thiểu nguy cơ mất dữ liệu nếu một bản sao bị hỏng.
- Thông Lượng: Cần tính toán lưu lượng giữa các broker nếu có nhiều bản sao.
Phân Bổ Bản Sao (Replicas)
Kafka đảm bảo các bản sao cho một partition được đặt trên các broker khác nhau, ngăn chặn rủi ro mất dữ liệu từ sự cố mạng hoặc thiết bị.
Cấu Hình Bầu Chọn Leader Không An Toàn
Bầu chọn leader khi không còn bản sao đồng bộ chỉ xảy ra ở cấp độ broker và có thể dẫn đến mất dữ liệu. Cấu hình unclean.leader.election.enable mặc định là false vì lý do an toàn nhất định.
Tình Huống Khó Khăn Khi Không Có Bản Sao Đồng Bộ:
- Nếu chỉ còn bản sao không đồng bộ, partition sẽ không thể hoạt động cho đến khi khôi phục bản sao đồng bộ.
- Nếu cho phép bản sao không đồng bộ trở thành leader, dữ liệu có thể bị mất và gây ra sự không nhất quán cho consumer.
Số Bản Sao Tối Thiểu Đang Đồng Bộ
Thiết lập số bản sao tối thiểu bằng min.insync.replicas giúp đảm bảo dữ liệu được ghi vào nhiều hơn một bản sao, tránh mọi tình huống không mong muốn xảy ra.
Giữ Cho Các Bản Sao Luôn Đồng Bộ
Sử dụng các cấu hình zookeeper.session.timeout.ms và replica.lag.time.max.ms để kiểm soát nhạy cảm và tránh tình trạng bất đồng bộ cho các bản sao.
Lưu Trữ Trên Đĩa
Kafka xác nhận các message dựa trên số lượng bản sao đã nhận message, nhưng cần xem xét cấu hình flush.messages và flush.ms để kiểm soát tần suất ghi dữ liệu xuống đĩa.
3. Thông Tin Kết Nối
Nếu bạn muốn thảo luận thêm về nội dung bài viết, hãy kết nối với tôi qua LinkedIn và Facebook:
- LinkedIn: Nguyễn Trung Nam
- Facebook: Trung Nam Nguyễn
Rất vui được kết nối và cùng thảo luận!
source: viblo