Kafka on PaaSTA: Running Kafka on Kubernetes at Yelp (Part 2 - Migration)

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

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

Phần 2 (migration). Phần 1 (kiến trúc): Yelp 2021.

Bối cảnh

Chuyển các cụm Kafka đang chạy từ EC2 sang Kubernetes (PaaSTA) mà producer và consumer không bị gián đoạn. Ba thành phần phải thay:

Thành phần EC2 PaaSTA
Điểm vào cụm ELB service mesh của Yelp
Cân bằng cụm thuật toán rebalance trong kafka-utils Cruise Control
Tự đặt số partition cron job (Puppet) job Tron

Nhiều hệ nội bộ đọc file kafka_discovery; họ chỉ đổi broker_list trỏ sang điểm vào của mesh để giữ tương thích, và nhân dịp bỏ Puppet làm nguồn sự thật.

Các bước

  1. Dựng load balancer trên mesh cho mỗi cụm, quảng bá cả broker EC2: client có hai đường vào; xoá cache discovery cũ.
  2. Dựng Cruise Control với self-healing tắt (không để hai thuật toán rebalance cùng chạy); dựng instance PaaSTA nhưng tắt việc operator gọi Cruise Control.
  3. Với cụm N broker, thêm N broker PaaSTA: cụm tạm gấp đôi. Tắt rebalance cũ.
  4. Một helper service gọi API remove_broker của Cruise Control để dời partition khỏi từng broker EC2 một.
  5. Hết dữ liệu thì thu ASG về 0, bỏ ELB khỏi config. Hạ tầng AWS quản bằng Terraform nên rollback chỉ là git revert. Cuối cùng bật self-healing.

Đánh đổi và rủi ro

  • Gấp đôi cụm tốn tiền tạm thời và làm cụm lớn càng lớn, nhưng nhanh hơn kiểu thêm một bớt một (vốn cần sửa logic operator và tự ghép cặp broker cùng AZ). Phương án MirrorMaker sang cụm mới bị loại vì bước copy dữ liệu dài.
  • Rollback là đảo ngược từng bước (dùng add_broker). Cả migrate lẫn rollback đều phụ thuộc Cruise Control khoẻ: cấp dư tài nguyên, giám sát, có instance dự phòng. Từng gặp Cruise Control hỏng vì partition offline; giảm cửa sổ lookback giúp nó dựng lại mô hình nhanh hơn.
  • Darklaunch: clone một cụm bằng MirrorMaker rồi migrate thử trọn vẹn ở non-prod, rồi ở prod; sau đó migrate thật dev và staging trước production.

Bài học cho SWE

  • Migrate hệ có trạng thái: dựng đường mới song song, chuyển dữ liệu bằng chính cơ chế rebalance của hệ, rồi mới gỡ đường cũ (Migration không downtime).
  • Tắt mọi tự động hoá có thể tranh nhau trong lúc migrate, bật lại khi xong.
  • Công cụ migrate cũng là một điểm hỏng; cấp dư và có bản dự phòng cho nó (Nền tảng nội bộ cho service (đường ray chung)).

Liên quan