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

Cơ chế phân bổ partition và replicas trong kafka

0 0 6

Người đăng: Nguyễn Trung Nam

Theo Viblo Asia

1. Mở đầu

Phân bổ partition và replica là một yếu tố quan trọng trong việc tối ưu hóa hiệu suất và tính sẵn sàng của hệ thống Kafka. Bài viết này sẽ khám phá quy trình phân bổ các partition giữa các broker, cách Kafka xử lý phân phối trên các rack khác nhau, và quản lý không gian lưu trữ. Chúng ta sẽ cùng tìm hiểu cách Kafka đảm bảo dữ liệu được phân phối đồng đều và hiệu quả, đồng thời làm nổi bật các điểm cần chú ý để duy trì hiệu suất và khả năng mở rộng của hệ thống.

2. Cơ chế

Khi chúng ta tạo một topic, Kafka sẽ quyết định cách phân bổ các partition giữa các broker. Giả sử bạn có 6 broker và tạo một topic với 10 partition cùng hệ số sao chép (replication factor) là 3. Khi đó, Kafka cần phân bổ 30 bản sao của partition cho 6 broker. Mục tiêu của quá trình phân bổ là:

  • Phân phối các bản sao đồng đều giữa các broker — trong ví dụ này, mỗi broker sẽ có 5 bản sao.
  • Đảm bảo rằng mỗi bản sao của một partition nằm trên các broker khác nhau. Ví dụ, nếu partition 0 có leader trên broker 2, thì các follower phải nằm trên broker 3 và 4, nhưng không được đặt trên broker 2 và không được cả hai cùng nằm trên broker 3.
  • Nếu các broker có thông tin về rack (có từ Kafka 0.10.0 trở lên), thì các bản sao của mỗi partition sẽ được phân bổ vào các rack khác nhau nếu có thể. Điều này giúp tránh tình trạng partition bị mất hoàn toàn nếu có sự cố ảnh hưởng đến cả một rack.

Để làm điều này, chúng ta bắt đầu với một broker ngẫu nhiên (giả sử là broker 4) và phân bổ các partition cho từng broker theo phương pháp round robin để chọn vị trí của leader. Ví dụ, leader của partition 0 sẽ ở broker 4, leader của partition 1 sẽ ở broker 5, leader của partition 2 sẽ ở broker 0 (vì chỉ có 6 broker), và tiếp tục như vậy. Sau đó, với mỗi partition, chúng ta đặt các replica ở các broker tiếp theo, theo thứ tự tăng dần so với leader. Nếu leader của partition 0 ở broker 4, follower đầu tiên sẽ ở broker 5 và follower thứ hai ở broker 0. Leader của partition 1 ở broker 5, nên follower đầu tiên ở broker 0 và follower thứ hai ở broker 1.

Khi rack awareness được tính đến, thay vì chọn các broker theo thứ tự số, chúng ta sắp xếp danh sách broker sao cho luân phiên giữa các rack. Giả sử broker 0 và 1 nằm trên cùng một rack, còn broker 2 và 3 trên một rack khác. Thay vì chọn theo thứ tự từ 0 đến 3, chúng ta sắp xếp thành 0, 2, 1, 3—mỗi broker sẽ được chọn luân phiên từ một rack khác nhau (Xem Hình 2). Ví dụ, nếu leader của partition 0 nằm trên broker 2, replica đầu tiên sẽ được đặt trên broker 1, thuộc rack khác. Điều này rất có lợi vì nếu rack đầu tiên ngừng hoạt động, chúng ta vẫn có một replica trên rack khác, giúp partition vẫn khả dụng. Hình 1. Partition và bản sao được gán cho các broker trên các rack khác nhau.

Sau khi chúng ta chọn đúng broker cho mỗi partition và replica, bước tiếp theo là quyết định thư mục nào sẽ được sử dụng cho các partition mới. Quá trình này được thực hiện độc lập cho từng partition, và quy tắc rất đơn giản: chúng ta đếm số lượng partition trên mỗi thư mục và thêm partition mới vào thư mục có ít partition nhất. Điều này có nghĩa là nếu bạn thêm một ổ cứng mới, tất cả các partition mới sẽ được tạo trên ổ cứng đó. Lý do là vì, cho đến khi mọi thứ được cân bằng, ổ cứng mới sẽ luôn có ít partition nhất.

3. Lưu ý

Chú ý đến dung lượng ổ cứng

Lưu ý rằng việc phân bổ partition cho các broker không xem xét không gian còn trống hoặc tải hiện tại, và việc phân bổ partition cho các ổ cứng chỉ dựa trên số lượng partition mà không xét đến kích thước của các partition. Điều này có nghĩa là nếu một số broker có nhiều dung lượng ổ cứng hơn các broker khác, một số partition có kích thước lớn bất thường, hoặc chúng ta có các ổ cứng có kích thước khác nhau trên cùng một broker, chúng ta cần phải cẩn thận với việc phân bổ phân vùng.

4. Thông tin kết nối

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

LinkedIn: https://www.linkedin.com/in/nguyentrungnam/ Facebook: https://www.facebook.com/trungnam.nguyen.395/

Rất mong được kết nối và cùng thảo luận!

Bình luận

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

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

Kafka là gì?

Apache Kafka® là một nền tảng stream dữ liệu phân tán. . stream data: dòng dữ liệu, hãy tưởng tượng dữ liệu là nước trong 1 con suối. .

0 0 43

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

001: Message-driven programming với Message broker và Apache Kafka

Bài viết nằm trong series Apache Kafka từ zero đến one. . . Asynchronous programming.

0 0 164

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

002: Apache Kafka topic, partition, offset và broker

Bài viết nằm trong series Apache Kafka từ zero đến one. Nói qua về lịch sử, Kafka được phát triển bởi LinkedIn (các anh em dev chắc chẳng xa lạ gì) và viết bằng ngôn ngữ JVM, cụ thể là Java và Scala.

0 0 153

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

003: Gửi và nhận message trong Apache Kafka

Bài viết nằm trong series Apache Kafka từ zero đến one. . . Nếu muốn các message được lưu trên cùng một partition để đảm bảo thứ tự thì làm cách nào.

0 0 222

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

004: Apache Kafka consumer offset, Broker discovery và Zookeeper

Bài viết nằm trong series Apache Kafka từ zero đến one. 1) Consumer offset.

0 0 130

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

Apache Kafka - Producer - Gửi message đến Kafka bằng kafka-python

Overview. Understand how to produce message and send to the Kafka topic. Architecture. .

0 0 63