Rebalance your Kafka cluster

apache kafka

What is Kafka?

Nếu chưa biết Kafka là gì, bạn có thể tìm hiểu tại: https://kafka.apache.org/intro

Scaling your Kafka cluster

Một Kafka cluster gồm nhiều server chạy Kafka (trong kafka, mỗi server như vậy được gọi là một broker) để có tính sẵn sàng cao (high availability). Để đảm bảo khả năng chịu lỗi (fault-tolerant), các bản sao (replicas) của messages được duy trì trên mỗi broker, nhờ vậy nếu có server nào đó “sập” thì không xảy ra mất mát dữ liệu, cluster vẫn hoạt động bình thường. Nhờ có replication factor, ta có thể định nghĩa được số lượng bản sao của một topic trong cluster.

Thêm một broker vào cluster là rất đơn giản. Tuy nhiên broker này sẽ không được assign bất kỳ partition nào của các topic đang có, trừ khi bạn di chuyển các partition. Lúc này, cluster được gọi là unbalanced cluster. Unbalanced cluster cũng có thể xảy ra khi một server “sập” sau đó “sống” lại.

Unbalanced cluster xảy ra do các nguyên nhân sau: 1. Leader Skew 2. Broker Skew

Cách dễ nhất để phát hiện điều này là sử dụng CMAK, aka Cluster Manager for Apache Kafka, trước kia tên là Kafka Manager.

Khi một cluster là unbalanced thì có thể gây ra các vấn đề như high disk, high CPU, high network traffic mặc dù đã bổ sung thêm broker vào cluster.

Ta cùng đi vào chi tiết để hiểu rõ hơn.

Leader Skew

Giả sử ta có một topic gồm 3 partitions, replication factor là 3 và cluster có 3 brokers.

Tất cả các yêu cầu đọc ghi sẽ đi tới leader partition. Followers sẽ đồng bộ các message từ leaders. Followers chỉ có chức năng redundancy và fail-over.

kafka cluster

Nếu có một broker “sập”, Kafka sẽ promote một follower partition làm leader (partition được promoted phải là ISR, in-sync replica, tức là phải đồng bộ hoàn toàn với leader).

kafka cluster one node down

Có thêm một broker “sập”, tất cả leaders sẽ tập trung tại một broker duy nhất. Broker này sẽ nhận và xử lý toàn bộ các requests.

kafka cluster two nodes down

Một lúc sau, hai brokers kia hoạt động bình thường trở lại, nhưng tất cả leader partitions vẫn sẽ tập trung tại một broker và broker này vẫn nhận và xử lý toàn bộ các requests. Điều này cũng đúng nếu ta thêm broker vào cluster.

kafka cluster goes back to normal

Có 3 cách để giải quyết vấn đề này:

  1. Thêm auto.leader.rebalance.enable=true vào config của các broker.
  2. Sử dụng kafka-preferred-replica-election.sh.
  3. Chạy Preferred Replica Election trong Kafka Manger.

Broker Skew

Broker Skew xảy ra nếu một broker có nhiều hơn số partition tối đa trên mỗi broker của một topic.

Ví dụ ta có một topic với 4 partitions, replication factor là 2 và cluster gồm 3 brokers. Tổng ta có 4 x 2 = 8 partitions và do đó mỗi broker có thể chứa tối đa 3 partitions. Nhưng nếu có một broker chứa nhiều hơn thì Broker Skew xảy ra.

Có 2 cách để giải quyết vấn đề này:

  1. Sử dụng kafka-reassign-partitions.sh.
  2. Chạy Reassign Partitions trong Kafka Manager.

Kết luận

Hãy luôn đảm bảo Kafka cluster cân bằng (balance) để có được hiệu năng tốt nhất và không lãng phí tài nguyên. ✌

#kafka #devops