Apache Kafka mở rộng quy mô với PowerFlex cực nhanh

Apache Kafkalà hệ thống nhắn tin hàng đầu trong nhiều kiến ​​trúc dữ liệu thời gian thực và được áp dụng rộng rãi vì kiến ​​trúc có khả năng mở rộng, hiệu suất cao và linh hoạt. Tuy nhiên, hiệu suất của nó cũng gắn chặt với cơ sở hạ tầng chạy nó, đặc biệt là hiệu suất đĩa và lưu trữ.

Trong blog này, chúng tôi mô tả cách xây dựng cơ sở hạ tầng Kafka, Kubernetes và PowerFlex siêu hội tụ có khả năng mở rộng thông lượng nhắn tin vượt quá 1000MB/giây.

Ngành kiến ​​​​trúc

Kiến trúc cho chuẩn mực này là triển khai hiệu suất Confluent Kafka KRaft trên Kubernetes, sử dụng cơ sở hạ tầng siêu hội tụ Dell PowerFlex.

Chúng tôi đã sử dụng phần cứng sau: 

  • 8 nút PowerFlex trên Dell PowerEdge R650 Intel(R) Xeon(R) Gold 6330 CPU @ 2.00GHz MEM 256 GB. 
  • 2 công tắc Dell TOR S5248F – OS10 

Và các phiên bản phần mềm sau: 

  • Apache Kafka: 7.5
  • Kubernetes: 1.30.3 
  • ĐỘ BỀN: 9,4 
  • Sức mạnh linh hoạt: 4.6
  • Trình điều khiển PowerFlex CSI: 2.11

Kiểm tra hiệu suất khối lượng

Một trong những cách phổ biến nhất để kiểm tra hiệu suất của thiết bị khối là sử dụng FIO (Flexible I/O tester). Các số liệu chính được FIO đo lường là thông lượng, độ trễ của IOPS, độ sâu hàng đợi và hiệu suất Đọc/Ghi tổng thể. FIO có thể tạo ra nhiều loại khối lượng công việc I/O khác nhau, từ đọc tuần tự đến ghi ngẫu nhiên và hỗn hợp đọc/ghi ngẫu nhiên hoặc hầu như bất kỳ cấu hình nào mà người dùng có thể muốn. Dự án FIO cung cấp nhiều ví dụ khác nhau: https://github.com/axboe/fio/tree/master/examples .

Đối với điểm chuẩn này, chúng tôi đã sử dụng kubestr để dễ dàng chạy tác vụ FIO trên cụm Kubernetes.

kubestr fio -s powerflex --fiofile pflex-fio-randrw.fio

Biểu đồ sau đây cung cấp thông tin chi tiết về hiệu suất từ ​​một lần chạy thử nghiệm trên cơ sở hạ tầng siêu hội tụ PowerFlex. Bài kiểm tra mô phỏng khối lượng công việc Kafka bằng cách sử dụng một cấu hình với 50% đọc ngẫu nhiên và 50% ghi ngẫu nhiên. Kích thước khối 1 MB được sử dụng và bài kiểm tra được lặp lại với nhiều độ sâu hàng đợi khác nhau (0, 4, 8, 16, 32, 64) để đánh giá cách hệ thống lưu trữ xử lý đồng thời khối lượng công việc tăng lên. Bạn có thể tìm thấy cấu hình FIO tại đây . 

Biểu đồ độ sâu hàng đợi GB/giây – đạt được băng thông 10 GB/giây với 20 k IOPS

IOPS và độ trễ từ Giao diện người dùng PowerFlex Manager

Kafka

Triển khai

Như đã đề cập ở trên, Kafka đã được triển khai trong cùng cơ sở hạ tầng Kubernetes với PowerFlex. Để đơn giản, chúng tôi đã triển khai một phiên bản ba bản sao bằng cách sử dụng hình ảnh Confluent cho Apache Kafka ở chế độ KRaft với thiết lập cấu hình bằng không. Cấu hình triển khai có sẵn tại đây . Đối với Red Hat OpenShift, bạn phải thêm các đặc quyền vào Tài khoản dịch vụ Kafka như sau:

chính sách oc adm add-scc-to-user đặc quyền -z kafka -n kafka

Tạo chủ đề

Số lượng phân vùng rất quan trọng để đạt được thông lượng cao. Nhiều phân vùng hơn cho phép song song hóa tốt hơn trong khi giảm bớt gánh nặng cho người dùng và broker. Trong ví dụ sau, 108 phân vùng được sử dụng.

Vậy, chúng ta hãy tạo chủ đề kiểm tra hiệu suất : 

kubectl exec -ti -n kafka kafka-0 -- \
  chủ đề kafka \
  --bootstrap-server kafka-headless.kafka.svc.cluster.local:9092 \
  --tạo nên \
  --chủ đề kiểm tra hiệu suất \
  --phân vùng 108 \
  --hệ số sao chép 3

Nếu mọi thứ đều ổn, nó sẽ trả về: 

Đã tạo chủ đề perf-test.

Tiêu chuẩn của nhà sản xuất

Lệnh sau đây mô phỏng khối lượng công việc của nhà sản xuất và đánh giá hiệu suất của nhà sản xuất Kafka về mặt thông lượng tin nhắn, độ trễ và mức sử dụng mạng:

kubectl exec -ti -n kafka kafka-0 -- \
  kafka-producer-perf-test \
  --chủ đề kiểm tra hiệu suất \
  --kích thước bản ghi 512 \
  --producer-props bootstrap.servers=kafka-headless.kafka.svc.cluster.local:9092 \
  --thông lượng 60000 \
  --số bản ghi 54000000 \
  --producer-props acks=tất cả linger.ms=10

Nếu hoạt động, kết quả đầu ra sẽ tương tự như thế này:   

Đã gửi 299998 bản ghi, 59987,6 bản ghi/giây (29,29 MB/giây), độ trễ trung bình 1,2 ms, độ trễ tối đa 6,0 ms.
Đã gửi 300114 bản ghi, 60010,8 bản ghi/giây (29,30 MB/giây), độ trễ trung bình 1,2 ms, độ trễ tối đa 8,0 ms.
Đã gửi 299998 bản ghi, 59999,6 bản ghi/giây (29,30 MB/giây), độ trễ trung bình 1,2 ms, độ trễ tối đa 6,0 ms.
Đã gửi 54000000 bản ghi, 59999.200011 bản ghi/giây (29,30 MB/giây), độ trễ trung bình 1,21 ms, độ trễ tối đa 269,00 ms, 1 ms thứ 50, 4 ms thứ 95, 4 ms thứ 99, 5 ms thứ 99,9.

Nhà sản xuất Kafka hoạt động hiệu quả với việc xử lý hàng loạt hiệu quả và độ trễ tối thiểu. Các thông báo được phân bổ đều giữa các phân vùng. Bảng dưới đây cung cấp kết quả thử nghiệm:

Bản ghi mỗi giây Thông lượng Độ trễ trung bình Tổng thông lượng
59999 29,30 MB\giây 1,21 giây 87,9 MB\giây

Tiêu chuẩn của người tiêu dùng

Tương tự như công cụ kiểm tra hiệu suất của nhà sản xuất, Kafka phân phối công cụ kiểm tra hiệu suất của người tiêu dùng. Tiện ích này đánh giá khả năng xử lý tin nhắn, kiểm tra thông lượng, hiệu quả truy xuất và đo lường tỷ lệ tiêu thụ của người tiêu dùng.

Trong trường hợp này, chúng tôi sẽ khởi chạy ba người dùng song song: 

kubectl exec -ti -n kafka kafka-0 -- \
  kafka-consumer-perf-test \
  --broker-list kafka-headless.kafka.svc.cluster.local:9092 \
  --chủ đề kiểm tra hiệu suất \
  --tin nhắn 53950000 \
  --group=kiểm tra hiệu suất-1 \
  --hiển thị-thống kê-chi tiết \
  --ẩn tiêu đề \
  --hết thời gian 60000
kubectl exec -ti -n kafka kafka-1 -- \
  kafka-consumer-perf-test \
  --broker-list kafka-headless.kafka.svc.cluster.local:9092 \
  --consumer.config /cấu hình \
  --chủ đề kiểm tra hiệu suất \
  --tin nhắn 53950000 \
  --group=kiểm tra hiệu suất-2 \
  --hiển thị-thống kê-chi tiết \
  --ẩn tiêu đề \
  --hết thời gian 60000
kubectl exec -ti -n kafka kafka-2 -- \
  kafka-consumer-perf-test \
  --broker-list kafka-headless.kafka.svc.cluster.local:9092 \
  --chủ đề kiểm tra hiệu suất \
  --tin nhắn 53950000 \
  --nhóm=kiểm tra hiệu suất-3 \
  --hiển thị-thống kê-chi tiết \
  --ẩn tiêu đề \
  --hết thời gian 60000

Trong quá trình thử nghiệm này, thông lượng đạt 1000 MB/giây, cho thấy hiệu suất của người dùng. Với thông lượng cao, người dùng có thể xử lý khối lượng lớn tin nhắn.

Phần kết luận

Chạy Kafka trên Dell PowerFlex với Kubernetes cung cấp giải pháp có khả năng mở rộng, phục hồi và hiệu suất cao để quản lý các ứng dụng phát trực tuyến dữ liệu thời gian thực. Cơ sở hạ tầng do phần mềm Dell PowerFlex xác định, kết hợp với điều phối container Kubernetes, đảm bảo khả năng mở rộng cụm Kafka liền mạch, quản lý lưu trữ mạnh mẽ và tính khả dụng cao.

Khả năng thích ứng của Powerflex trong việc xử lý khối lượng công việc đòi hỏi nhiều IO, cùng với khả năng quản lý vòng đời và tích hợp với Kubernetes, cung cấp cơ sở hạ tầng lý tưởng để triển khai và quản lý Kafka, cho phép các doanh nghiệp xử lý khối lượng dữ liệu lớn với độ trễ và độ phức tạp tối thiểu trong vận hành.