Finding Kafka's throughput limit in Dropbox infrastructure

Bài tóm tắt Dropbox 2019 3. Quy mô lớn Độ khó: Trung bình

Dropbox · 2019 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bối cảnh

  • Kafka ở Dropbox phục vụ analytics, ML, monitoring, search, stream processing (Cape); đội Jetstream vận hành và cần biết giới hạn throughput để cấp cluster.

Thay đổi chính

  • Nền tảng test tự động: client Kafka chạy trên Spark để sinh tải tuỳ ý; ba cluster kích thước khác nhau; topic có số partition gấp 10 lần số broker (mỗi broker lead đúng 10 partition) để tránh tranh chấp ghi.
  • Rút không gian tham số về hai chiều chính: số message/giây và byte/message. Tăng tải bằng số producer cùng tốc độ thay vì chỉnh tốc độ một producer (batching làm khó điều khiển).
  • Chỉ báo quá tải lấy luôn từ monitoring production: IO thread idle dưới 20%, ISR thay đổi trên 50% thời gian.
  • Tìm biên bằng binary search trên số producer cho từng kích thước message, ghép thành đường biên vùng an toàn.
  • Kết quả: khoảng 60 MB/s mỗi broker (message ngẫu nhiên để nén không giúp; message lặp ký tự cho giới hạn cao hơn nhiều). Giữ được tới 5 consumer group; nhiều hơn thì mạng nghẽn, trong khi tỉ lệ đọc/ghi thật thấp hơn 5.
  • Quy tắc cấp phát: cho phép 20% broker offline thì mỗi broker an toàn khoảng 60 × 0,8 ≈ 50 MB/s.

Vì sao

  • Chạy lại cùng bộ test khi đổi phần cứng, mạng, phiên bản Kafka; dùng làm bàn thử tái hiện sự cố.

Bài học cho SWE

  • Dùng chính metric cảnh báo của production làm định nghĩa "quá tải" trong load test.
  • Con số capacity phải kèm điều kiện (độ nén, số consumer group, phần cứng); Dropbox nhấn mạnh số của họ có thể không áp cho nơi khác.

Liên quan