- vừa được xem lúc

Kafka không cần Zookeeper? Kafka Kraft mode

0 0 23

Người đăng: Hoàng Việt

Theo Viblo Asia

Mở đầu

Các bạn nếu đã từng làm việc với Kafka thì sẽ quen với mô hình sử dụng Zookeeper với Kafka. Không biết các bạn có tự hỏi giống mình là tại sao chúng ta cần phải sử dụng thêm Zookeeper mà không sử dụng trực tiếp luôn Kafka? Cho các bạn nào chưa biết thì Zookeeper có nhiệm vụ:

  • Quản lý metadata của Kafka: ZooKeeper lưu trữ metadata của cụm Kafka, bao gồm vị trí của các broker, cấu hình topic và các phân vùng (partition).

  • Bầu cử nhà lãnh đạo: ZooKeeper được sử dụng để bầu leader cho mỗi phân vùng (partition) của một topic. Điều này đảm bảo rằng chỉ có một broker chịu trách nhiệm xử lý ghi cho một phân vùng cụ thể vào bất kỳ thời điểm nào.

  • Quản lý consumer group offsets: ZooKeeper được sử dụng để lưu trữ vị trí đọc hiện tại (current offset) của mỗi consumer group. Điều này cho phép consumer tiếp tục đọc tiếp từ vị trí cũ khi bị lỗi hay khởi động lại.

  • HealthCheck: ZooKeeper giám sát sức khỏe của cụm Kafka và có thể thông báo cho quản trị viên nếu có bất kỳ vấn đề nào phát sinh.

image.png

Zookeeper có những lợi ích nhất định đối với hệ thống, tuy nhiên trong một số trường hợp zookeeper làm tăng độ phức tạp của hệ thống, tăng khả năng lỗi do có nhiều thành phần,... Với mô hình Kafka mới trong bài này mình giới thiệu đến các bạn thì chúng ta sẽ không còn cần sử dụng Zookeeper nữa! Mô hình này hoạt động trong chế độ Kraft của Kafka.

Kafka Kraft là gì?

Kafka Kraft là một giao thức đồng thuận mới được phát triển nhằm múc đích loại bỏ đi sự hiện diện của Zookeeper trong hệ thống. Thay vì lưu trữ dữ liệu thành 2 thành phần hệ thống riêng biệt: Zookeeper và Kafka thì với giao thức này, Kafka sẽ tự lưu trữ các metadata trên chính nó. Sử dụng giao thức này bạn cần bật chế độ Kraft trên cụm Kafka, Kraft sẽ sử dụng Qurom Controller mới với giao thức đồng thuận Raft để bầu chọn leader.

image.png

Zookeeper đã tạo ra tội lỗi gì mà phải loại bỏ?

Nếu bạn đã sử dụng Kafka với Zookeeper ngon lành thì không có lý do gì để thay đổi mô hình cả! Tuy nhiên nếu bạn đã gặp lỗi khi chạy hay hệ thống đã to dần lên với nhiều topic, nhiều partition thì cần cân đo đong đếm lại. Sau đây là lý do tại sao ta nên cân nhắc loại bỏ Zookeeper:

  • Với giới hạn của Zookeeper, Kafka chỉ có thể hỗ trợ 200,000 partitions
  • Khi có broker tham gia vào cluster, việc đồng bộ và bầu chọn lại leader có thể gây quá tải ở Zookeeper và làm chậm hệ thống.
  • Việc cài đặt cụm Kafka với Zookeeper khá phức tạp, khó xây dựng.
  • Đôi khi việc đồng bộ metadata từ Kafka sang Zookeeper sẽ bị lỗi
  • Đảm bảo security khó khăn hơn (Bảo vệ 1 thằng thì dễ hơn 2 thằng)
  • ....

Với 1 vài các yếu tố trên và với kinh nghiệm 1 thời gian chinh chiến kha khá với Kafka thì mình nghĩ việc chuyển sang Mode Kraft rất đáng cân nhắc!

Kraft Mode hoạt động thế nào?

Chế độ này sử dụng Quorum Controller mới trong Kafka, Quorum Controller sử dụng event-sourced storage model và cơ chế đồng thuận Raft để đồng bộ metadata giữa các Quorum (broker).

image.png

Một trong số Quorum Controller sẽ đóng vai trò leader tạo ra event trong metadata topic, các Quorum Controller còn lại sẽ đồng bộ từ leader bằng cách phản hồi các event này. Vì vậy khi một broker bị lỗi và cần tham gia lại có thể bắt kịp các sự kiện bị mất từ nhật ký event.

Không như với mô hình dựa trên Zookeeper, khi có sự thay đổi về Leader thì Quorum Controller mới đã có sẵn các dữ liệu metadata đã được đồng bộ trong bộ nhớ thay vì phải load lại trạng thái từ Zookeeper.

Lợi ích khi sử dụng Kraft Mode

  • Tăng khả năng mở rộng của Kafka, dễ dàng mở rộng đến hàng triệu partition
  • Dễ dàng cài đặt, bảo trì <= Cái này đụng vào rồi mới thấy nó sướng 😄 😄 😄
  • Tăng sự ổn định cho hệ thống, dễ dàng giám sát và quản lý (Do mô hình đơn giản hơn)
  • Khởi động, Restart Kafka nhanh hơn
  • Tăng khả năng phục hồi khi xảy ra sự cố

Sau đây là bảng so sánh thời gian Shutdown và Recovery giữa 2 mô hình With Zookeeper và With Quorum Controller, ta có thể nhận thấy được sự khác biệt tương đối lớn.

image.png

Bắt đầu nhanh với Kafka Kraft mode

Để bắt đầu nhanh sử dụng thử Kraft mode này bạn có thể sử dụng docker để dựng:

docker run -p9092:9092 --name kafka -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true -e KAFKA_ENABLE_KRAFT=yes bitnami/kafka:latest

Tham khảo

Sau đây là các nguồn mình có tham khảo và sử dụng hình ảnh: https://developer.confluent.io/learn/kraft/ https://www.conduktor.io/kafka/kafka-kraft-mode/ https://www.baeldung.com/kafka-shift-from-zookeeper-to-kraft https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum https://raft.github.io/

Chuyên mục quảng cáo

Nếu các bạn đang có nhu cầu triển khai ứng dụng như NodeJS, Python, Golang, Java hoặc sử dụng các Database - Message Queue như MongoDB, MySQL, Redis, Kafka thì có thể tham khảo sử dụng Bizfly Cloud App Engine nha! Đây là sản phẩm Serverless mà bên mình đang phát triển nhằm mục đích đơn giản hóa quá trình triển khai ứng dụng cho các bạn Devs. Hiện sản phẩm đang miễn phí sử dụng, hy vọng các bạn sẽ ủng hộ 😄. Bất cứ đóng góp gì các bạn có thể nhắn cho mình thông qua Telegram @HoangViet12 nhé! Have a nice day 😄

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tán gái theo kiểu Message Queue là thế nào?

. Bài toán. Vào những năm 1900, khi mà công nghệ chưa phát triển, con người chỉ nói chuyện với nhau trực tiếp hoặc qua thư... . Trai tài gái sắc, họ nói chuyện với nhau một cách thoải mái, tự nhiên. Mọi chuyện yên bình cho đến khi có anh chàng C đến, chiều cao chuẩn 1m8 chứ không cộng thêm sừng. C c

0 0 43

- vừa được xem lúc

[Kafka] - Spring Boot Kafka in depth

Tiếp tục chuỗi bài viết về Kafka. Bài viết này mình sẽ đi vào chi tiết một ứng dụng Spring Boot config sử dụng với Kafka.

0 0 36

- vừa được xem lúc

[Golang] Channel trong golang và use case - part IIII (pubsub pattern)

Mở đầu. . Tiếp tục series, hôm nay là một buổi chia sẽ của tôi về cách implement lại pubsub pattern bằng golang channel. Let's go, guys.

0 0 28

- vừa được xem lúc

Setup Boilerplate cho dự án NestJS - Phần 8: Xử lý Background job với BullMQ 🛠️

Đây là bài viết nằm trong Series NestJS thực chiến , các bạn có thể xem toàn bộ bài viết ở link : https://viblo.asia/s/nestjs-thuc-chien-MkNLr3kaVgA. . Đặt vấn đề .

0 0 22

- vừa được xem lúc

Bí kíp đồng bộ dữ liệu từ MySQL sang Elasticsearch: Lựa chọn nào dành cho bạn?

Chào các bạn. Vấn đề: Dữ liệu sản phẩm thường được lưu trữ trong MySQL, nhưng để tìm kiếm hiệu quả, chúng ta cần chuyển nó sang ES.

0 0 18

- vừa được xem lúc

Nghiên cứu cơ bản về RabbitMQ

Tổng quan. RabbitMQ là một phần mềm trung gian cung cấp dịch vụ triển khai và quản lý message queue, hay còn được gọi là message broker.

0 0 15