Open sourcing Brooklin: Near real-time data streaming at scale

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

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

Bối cảnh

  • Bài toán không chỉ là chuyển nhiều dữ liệu, mà là số loại hệ nguồn và đích tăng nhanh (Espresso, Oracle, MySQL, Kafka, Azure Event Hubs, Kinesis).
  • Mirror Kafka giữa các cụm và data center dùng Kafka MirrorMaker (KMM): mỗi cụm KMM chỉ nối một cặp cụm Kafka nên phải vận hành hàng chục tới hàng trăm cụm KMM; lỗi một partition làm hỏng cả pipeline; lệnh flush đồng bộ có thể làm pipeline đứng vài phút.
  • CDC dùng Databus.

Thay đổi chính

  • Brooklin (production từ 10/2016): service phân tán chuyển dữ liệu giữa các hệ, mở rộng bằng cách viết consumer/producer mới. Hai nhóm dùng:
    • Streaming bridge: giữa cloud (Kinesis, Azure), giữa cụm, giữa data center; có thể áp chính sách toàn công ty tại một chỗ (định dạng vào, mã hoá ra).
    • CDC: stream thay đổi từ Oracle, Espresso, MySQL để ứng dụng không phải query DB online; có bootstrap snapshot và giữ ranh giới transaction. Thay Databus cho Espresso và Oracle.
  • Thay hoàn toàn KMM: một cụm Brooklin phục vụ nhiều pipeline (multitenant); tạo hoặc sửa pipeline (danh sách topic được mirror) bằng một HTTP call, không phải sửa và deploy config tĩnh; pause/resume theo pipeline, topic hoặc partition; endpoint chẩn đoán gom lag và lỗi từng partition cả cụm.
  • Cô lập lỗi: phát hiện lỗi ở mức partition và tự pause partition đó, tự resume sau một khoảng; partition khác chạy tiếp. Chế độ flushless produce checkpoint theo partition thay vì gọi flush.
  • Kết quả: số cụm mirror từ hàng trăm xuống khoảng một chục; hàng nghìn stream, hơn 2 nghìn tỷ message/ngày.

Vì sao

  • Một service chuyên chuyển dữ liệu gom độ phức tạp (truy cập, định dạng, bảo mật) về một chỗ để team ứng dụng chỉ lo xử lý dữ liệu.

Bài học cho SWE

  • Công cụ mỗi cặp nguồn-đích một cụm sẽ nổ số cụm; thiết kế multitenant với cấu hình động từ đầu.
  • Đơn vị cô lập lỗi nên nhỏ nhất có thể (partition), kèm tự phục hồi cho lỗi tạm thời.

Liên quan