Xin chào, lại là mình - Đức Phúc, anh chàng hơn 6 năm trong nghề vẫn nghèo technical nhưng thích viết Blog để chia sẻ kiến thức bản thân học được trong quá trình “cơm áo gạo tiền” đây. Các bạn có thể theo dõi mình thêm qua một số nền tảng bên dưới nhé:
- Linkedin: https://www.linkedin.com/in/phuc-ngo-728433346
- Viblo: https://viblo.asia/u/NHDPhucIT
- Patreon: https://www.patreon.com/felix_ngo
- Facebook: https://www.facebook.com/DucPhucIT
Ở bài viết này, chúng ta sẽ tìm hiểu về Zookeeper và Kafka Raft nhé
1. Zookeeper
Zookeeper là một phần mềm đóng vai trò giữ danh sách và quản lý Kafka Brokers. Nó cũng cực kỳ hữu dụng trong trường hợp nếu bất kì Broker Leader nào gặp sự cố, nó sẽ tiến hành chọn ra Leader mới (Leader Election)
Ngoài ra, khi có sự thay đổi, Zookeeper cũng sẽ gửi thông báo đến Kafka Broker. Ví dụ như khi 1 Topic mới được khởi tạo hay bị xoá, hoặc khi 1 Broker nào đó down/up
Như vậy, Zookeeper có rất nhiều Kafka metadata.
Tuy nhiên, bạn sẽ cần lưu ý về phiên bản của Kafka khi sử dụng với Zookeeper nhé
- Kafka phiên bản
2.x
: Không thể hoạt động nếu không có Zookeeper - Kafka phiên bản
3.x
: Có thể hoạt động mà không cần đến Zookeeper. Thay vào đó, sẽ dùng Kafka Raft - Kafka phiên bản
4.x
trở đi: Zookeeper không còn được sử dụng cùng Kafka nữa
Zookeeper cũng được thiết kế để hoạt động với số Server là số lẻ (1,3,,5,7…). Nó cũng có khái niệm về Leader và Follower.
Zookeeper sẽ không chứa bất kỳ Offset nào của Consumer từ phiên bản 0.10
trở đi
Ở hình ảnh minh hoạ trên, ta sẽ có 3 Zookeeper Server. Server thứ 2 được xem là Leader. Hai Server 1 và 3 đều là Follower. Tất cả chúng đều kết nối đến Brokers
2. Chúng ta có nên sử dụng Zookeeper không?
Câu trả lời sẽ là Có nếu bạn muốn quản lý Brokers trên Kafka Server cho những phiên bản < 4.0. Thực tế đã có những dự án đã dùng trước đây, thì chúng ta phải biết về nó
Tuy nhiên, với Kafka Client, chúng ta sẽ không cần sử dụng Zookeeper, bởi Kafka Client và CLI đã được chuyển đổi để chỉ sử dụng các Kafka Brokers làm điểm kết nối thay vì Zookeeper
Và kể từ Kafka phiên bản 2.2
, lệnh kafka-topics
cũng đã được thay đổi để chỉ tham chiếu đến các Kafka Broker thay vì Zookeeper. Lý do là vì trong tương lai, khi Kafka không còn phụ thuộc vào Zookeeper, thì các client vẫn sẽ hoạt động bình thường. Một phần cũng vì chúng được xem kém bảo mật hơn so với Kafka
3. Kafka KRaft
Vào năm 2020, Apache Kafka bắt đầu dự án xoá Zookeeper khỏi Kafka dependency. Họ đã nhận ra vấn đề về việc mở rộng Kafka với Zookeeper khi số lượng Partition lớn hơn 100,000. Với việc xoá Zookeeper, Kafka trở nên dễ bảo trì, cài đặt hơn, và có thể mở rộng lên đến hàng triệu Partitions
Cũng nhờ đó, về tính bảo mật, chúng ta sẽ chỉ cần quan tâm đến Kafka thôi. Hiển nhiên, việc loại bỏ này cũng làm cho quá trình tắt Controller và thời gian phục hồi được giảm xuống.
Từ phiên bản 3.X
, Kafka đã giới thiệu KRaft để thay thế cho Zookeeper. Tuy nhiên, với Production, nó sẽ có thể sử dụng từ phiên bản Kafka 3.3.1
(Tất nhiên, Zookeeper vẫn còn được giữ lại)
Từ phiên bản 4.X
trở đi, Kafka được release mà chỉ có Kafka KRaft, sẽ không còn Zookeeper nữa
Như các bạn thấy ở hình minh hoạ trên, với Quorum Controller của KRaft, việc quản lý Brokers đã trông đơn gian hơn nhiều. Kafka KRaft cũng cho thấy sự nổi trội của mình về hiệu suất
Như biểu đồ này, ta có thể thấy, với 2 triệu Partitions, thời gian cho việc tắt Controller và thời gian phục hồi giảm đi rất rất nhiều
4. Tổng kết
Như vậy, ở bài này, chúng ta đã tìm hiểu về Zookeeper và Kafka KRaft. Rõ ràng, KRaft có nhiều ưu điểm vượt trội hơn. Và chúng ta sẽ tìm hiểu sâu hơn về sau nhé.
Bài viết này cũng đã kết thúc phần 1 của Series, là phần cơ bản nhất về Kafka. Ở những phần tiếp theo, chúng ta sẽ đi sâu hơn về phần làm việc với Kafka nhé. Hẹn gặp lại mọi người
Một lần nữa, đừng quên connect với mình để cùng trao đổi nhé
- Linkedin: https://www.linkedin.com/in/phuc-ngo-728433346
- Viblo: https://viblo.asia/u/NHDPhucIT
- Patreon: https://www.patreon.com/felix_ngo
- Facebook: https://www.facebook.com/DucPhucIT