Kafka Replication
Last updated
Last updated
Kafka là một hệ thống phân tán với nhiều Broker, và để xử lý song song, Kafka chia các topic thành nhiều partition trải rộng trên các Broker khác nhau. Tuy nhiên, nếu một Broker gặp sự cố, có thể dẫn đến hai vấn đề:
Mất mát dữ liệu (Durability) – Nếu dữ liệu chỉ được lưu trữ trên Broker đó.
Gián đoạn dịch vụ (Availability) – Các partition trên Broker đó tạm thời không thể truy cập được.
Để giải quyết hai vấn đề này, Kafka sử dụng cơ chế Replication (nhân bản dữ liệu). Mỗi partition sẽ được sao chép (replicate) trên nhiều Broker khác nhau, đảm bảo:
Tính bền vững (Durability): Dữ liệu không bị mất ngay cả khi một Broker gặp sự cố, vì vẫn có bản sao trên các Broker khác.
Tính sẵn sàng (Availability): Nếu Broker chính (Leader) bị lỗi, một Broker khác chứa bản sao (Replica) sẽ tự động được chọn làm Leader mới, giúp hệ thống tiếp tục hoạt động mà không bị gián đoạn.
Nhờ cơ chế này, Kafka đảm bảo hệ thống vẫn hoạt động ổn định ngay cả khi có sự cố xảy ra với một hoặc một số Broker.
Kafka replication là cơ chế mà Kafka sử dụng để sao chép dữ liệu từ một broker (máy chủ) này sang các broker khác trong cụm (cluster). Mỗi bản copy được gọi là Replica và Replica trải đều trên nhiều Broker. Mục tiêu chính của replication là giải quyết 2 vấn đề mình nêu ở trên:
Durability: Nếu một broker bị lỗi, dữ liệu vẫn có thể được truy cập từ các bản sao khác.
Availability: Ứng dụng có thể tiếp tục hoạt động ngay cả khi một số broker không khả dụng.
Số lượng Replica gọi là replication factor và được cấu hình thông qua tham số replication.factor
trong topic. Ví dụ, nếu replication.factor = 3
, mỗi partition sẽ có 3 bản sao (1 leader và 2 followers).
Replication factor nên lớn hơn 1 và nhỏ hơn số lượng Broker. Khuyến nghị đặt replication.factor = 3
Trong Kafka, replication được thực hiện ở mức partition (phân vùng). Mỗi partition có thể có nhiều bản sao (replicas), bao gồm:
1 Leader replica: Nhận và xử lý tất cả các yêu cầu ghi/đọc từ producers và consumers.
Nhiều Follower replicas: Sao chép dữ liệu từ leader để duy trì tính nhất quán và sẵn sàng thay thế nếu leader thất bại.
Các Record từ Leader sẽ được sao chép sang cho follower một cách bất đồng bộ.
Các follower có số record giống như leader (đã sao chép đủ record) được gọi là In-Sync Replica (ISR). Theo cách hiểu đó thì Leader luôn là 1 ISR.
Producer chỉ ghi dữ liệu vào leader replica.
Consumer mặc định đọc từ leader replica nhưng có thể được cấu hình để đọc từ replica gần nhất.
ACK (Acknowledgment) là cơ chế xác nhận mà Kafka sử dụng để đảm bảo dữ liệu được ghi thành công vào broker.
acks=0
(No acknowledgment)
Producer không cần chờ phản hồi từ broker.
Tốc độ ghi nhanh nhưng dễ mất dữ liệu nếu broker gặp sự cố.
acks=1
(Leader acknowledgment)
Producer chỉ cần leader replica xác nhận đã nhận được dữ liệu.
Cân bằng giữa hiệu suất và độ an toàn, nhưng vẫn có rủi ro mất dữ liệu nếu leader bị crash trước khi dữ liệu được sao chép sang các replicas khác.
acks=all
(hoặc acks=-1
) (Full acknowledgment)
Producer chỉ nhận được xác nhận khi dữ liệu đã được ghi vào leader và tất cả replicas ISR (In-Sync Replicas).
Đảm bảo dữ liệu không bị mất nhưng tốc độ ghi có thể chậm hơn
Tóm lại:
Nếu ưu tiên hiệu suất → acks=0
Nếu cần cân bằng giữa hiệu suất và an toàn → acks=1
Nếu yêu cầu dữ liệu không bị mất → acks=all