0
0
Lập trình
NM

Vai trò và chức năng của Controller trong hệ thống Kafka: Quản lý cụm hiệu quả

Đăng vào 2 ngày trước

• 4 phút đọc

Chủ đề:

apache kafkakafka

1. Quản lý Thành viên Cụm

Kafka sử dụng Apache ZooKeeper để quản lý danh sách các broker trong cụm (cluster). Mỗi broker có một mã định danh duy nhất, được cấu hình trong tệp hoặc tự động tạo. Khi khởi động, broker tự động đăng ký trong ZooKeeper bằng cách tạo một ephemeral node. Những broker trong hệ sinh thái Kafka, bao gồm cả controller, theo dõi đường dẫn /brokers/ids trong ZooKeeper để nhận thông báo khi có broker mới gia nhập hoặc rời khỏi cụm.

Nếu bạn khởi động một broker mới với cùng ID của broker cũ, quá trình sẽ thất bại do node đó đã tồn tại. Khi một broker mất kết nối với ZooKeeper, node tạm thời này sẽ tự động biến mất, đồng thời các thành phần khác trong Kafka sẽ nhận được thông báo rằng broker đó đã ngừng hoạt động.

Mặc dù node đại diện cho broker sẽ bị xóa khi broker dừng hoạt động, ID của broker vẫn tồn tại trong các cấu trúc dữ liệu khác. Điều này có nghĩa là nếu broker cũ mất hoàn toàn và bạn khởi động một broker mới với cùng ID, broker mới sẽ tự động gia nhập lại cụm với trạng thái như cũ.

Ephemeral Node

Ephemeral node là một loại node tạm thời trong ZooKeeper. Khi broker kết nối với ZooKeeper và tạo ephemeral node, node này sẽ duy trì cho đến khi kết nối bị mất hoặc broker ngừng hoạt động. Khi kết nối ngắt, node sẽ biến mất, giúp ZooKeeper theo dõi các broker còn hoạt động trong hệ thống.

2. Chức Năng của Controller

Controller là một broker trong Kafka, không chỉ thực hiện các chức năng thông thường mà còn bầu chọn leader cho các partition. Broker đầu tiên khởi động trong cụm sẽ trở thành controller bằng cách tạo một ephemeral node trong ZooKeeper. Các broker khác khi khởi động sẽ nhận được thông báo lỗi khi cố gắng tạo node này, cho thấy rằng đã có một controller. Các broker này sẽ theo dõi node controller để nhận thông báo khi có thay đổi.

Khi controller mất kết nối với ZooKeeper, node của nó cũng sẽ biến mất, và các broker sẽ tiếp tục tạo một controller mới. Mỗi controller mới sẽ nhận một số thứ tự epoch cao hơn để tránh tình huống “split brain,” nơi có thể xảy ra tình huống có nhiều controller cùng một lúc.

Khi controller phát hiện một broker đã rời khỏi cụm, nó sẽ bầu chọn leader mới cho các partition thuộc về broker đó. Controller sử dụng yêu cầu LeaderAndISR để thông báo các broker khác về leader mới và cập nhật metadata. Mỗi khi một broker khởi động lại, nó cũng sẽ được cập nhật tương tự để có thể bắt kịp các leader.

Tóm lại, Kafka sử dụng tính năng ephemeral node trong ZooKeeper để quản lý controller, bầu chọn các leader cho các partition và replica, cũng như theo dõi các broker gia nhập hoặc rời khỏi cụm, tất cả nhằm đảm bảo tính khả dụng và độ tin cậy.

3. KRaft: Controller Mới Dựa Trên Raft của Kafka

Kể từ năm 2019, cộng đồng Apache Kafka đã quyết định chuyển từ controller dựa trên ZooKeeper sang mô hình mới sử dụng Raft, mang tên KRaft. Phiên bản thử nghiệm của KRaft được giới thiệu trong Apache Kafka 2.8 và sẽ chính thức có trong phiên bản 3.0, cho phép các cụm Kafka vận hành với cả hai loại controller.

Sự chuyển đổi này được thúc đẩy bởi những hạn chế trong kiến trúc hiện tại, bao gồm sự không nhất quán trong metadata, thời gian khởi động chậm khi controller được khởi động lại, và sự phức tạp trong việc quản lý ZooKeeper.

Trong KRaft, các node controller tạo thành một quorum Raft để quản lý log các sự kiện metadata. Log này ghi lại mọi thay đổi đối với metadata của cluster, nhờ đó giúp duy trì tính nhất quán và hiệu quả trong quản lý trạng thái của cụm Kafka.

Các broker sẽ tự động lấy thông tin cập nhật từ controller hiện tại qua một API mới mà không cần dựa vào ZooKeeper. Điều này giúp hành trình di chuyển sang KRaft trở nên mượt mà và hiệu quả hơn.

KRaft mang lại nhiều lợi ích, trong đó có việc giảm thiểu thời gian khởi động, cải thiện tính nhất quán và đơn giản hóa quá trình quản lý, giúp Apache Kafka trở thành một công cụ mạnh mẽ hơn trong việc xử lý dữ liệu lớn.

4. Kết Nối và Hỗ Trợ

Nếu bạn muốn trao đổi thêm về bài viết này, hãy kết nối với mình qua LinkedIn và Facebook:

Rất mong được kết nối và cùng thảo luận về Kafka và các chủ đề liên quan!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào