Kafka on PaaSTA: Running Kafka on Kubernetes at Yelp (Part 1 - Architecture)
Bài tóm tắt Yelp 2021 3. Quy mô lớn Độ khó: Trung bình
Yelp · 2021 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Phần 1 (kiến trúc). Phần 2 (migration): Yelp 2022.
Bối cảnh
- Kafka của Yelp nhận hàng chục tỷ message mỗi ngày (2021).
- Trước đây mọi cụm chạy trên EC2 riêng, cài trực tiếp, cấu hình qua repo Puppet tập trung. Tạo một cụm mới mất trung bình hơn 2 giờ; nâng cấp OS, nâng cấp Kafka, thay host hỏng đều cồng kềnh.
- Yelp đã chạy ứng dụng có trạng thái trên PaaSTA (PaaS nội bộ dựa trên Kubernetes) như Cassandra và Flink.
Thay đổi chính
- Broker chạy thành pod trong các pool của PaaSTA, với EBS gỡ ra gắn lại được (thay host không phải copy lại dữ liệu qua mạng, đỡ tốn tiền). Kafka chạy trong Docker; cấu hình đi theo đường chung của PaaSTA (Jenkins đẩy YAML khi commit) thay cho Puppet. ZooKeeper vẫn là cụm ngoài.
- Kafka operator tự viết: Kubernetes có StatefulSet nhưng không hiểu khái niệm của Kafka; operator có vòng reconcile so trạng thái mong muốn (CRD) với thực tế.
- Cruise Control (của LinkedIn) mỗi cụm một instance: theo dõi, dựng mô hình cụm, phát hiện vi phạm mục tiêu và tự sửa; cung cấp API rebalance, thêm/bớt broker. Thay cho các script lifecycle tự chế trước đây.
- Ví dụ bớt một broker: dev giảm số broker trong config → operator thấy lệch → gọi Cruise Control dời partition → theo dõi tới khi xong → xoá pod.
Kết quả
Dùng lại được công cụ CLI của PaaSTA (xem trạng thái, log, restart); thời gian dựng một cụm mới giảm một nửa.
Bài học cho SWE
- Đưa hệ có trạng thái lên nền tảng chung khi nền tảng đã chứng minh được với hệ có trạng thái khác; lợi ích lớn nhất là công cụ và quy trình dùng chung (Nền tảng nội bộ cho service (đường ray chung)).
- Operator + công cụ chuyên dụng (Cruise Control) là cách dạy Kubernetes hiểu một hệ phân tán cụ thể.
Liên quan
Nền tảng nội bộ cho service (đường ray chung)Event-driven, message queue và KafkaTự động hoá vận hành và auto-remediation
Được nhắc tới trong
Chủ đề (3)
Công ty (1)