Nói thật là làm data engineer mà phải xử lý việc đồng bộ dữ liệu giữa hệ thống vận hành giao dịch (OLTP) và kho lưu trữ phân tích (OLAP) thì đúng là "đau đầu vãi não" luôn đó!
Cái kiểu truy vấn theo lô (Batch query) ngày xưa giờ gặp data khủng là tèo ngay, lag kinh khủng. Nhưng mà đừng lo, giờ có CDC (Change Data Capture - tạm dịch là "bắt" mọi thay đổi của data) kết hợp với streaming là xong ngay, vừa nhanh vừa không làm chậm hệ thống gốc nữa!
1. CDC hoạt động như thế nào? Giải mã bí mật đằng sau
Thật ra các database như SQL Server, MySQL, PostgreSQL đều có một thứ gọi là Transaction Log (nhật ký giao dịch). Cứ mỗi lần có INSERT, UPDATE hay DELETE gì đó thì nó đều ghi vào đây trước, rồi mới update vào bảng thật.
CDC thông minh ở chỗ nó đọc thẳng file log này luôn, không cần phải query qua bảng:
Không làm lag hệ thống gốc:
Vì CDC chỉ đọc file log trên ổ cứng thôi, hoàn toàn không ăn RAM hay lock bảng gì cả. Hệ thống bán hàng của bạn vẫn chạy ngon lành!
Độ trễ gần như bằng 0:
Mọi thay đổi được bắt gần như tức thì, chỉ trong vài mili-giây. Real-time thiệt sự luôn!
2. Setup pipeline CDC chuẩn với Debezium và Apache Kafka
Muốn build một hệ thống CDC xịn xò thì phải dùng combo Debezium và Apache Kafka Connect.
Flow chạy qua 3 bước chính:
Bước 1: Phát hiện thay đổi (Debezium Engine)
Debezium cắm thẳng vào log file của database. Cứ có commit nào mới là nó bóc ra ngay, đóng gói thành message JSON có cả trạng thái cũ (Before) và mới (After) của data.
Bước 2: Truyền message (Apache Kafka Broker)
Message từ Debezium bay thẳng vào Topic tương ứng trong Kafka. Kafka như một cái queue siêu xịn, đảm bảo message được sắp xếp đúng thứ tự và không bị mất dù có sự cố mạng đi nữa!
Bước 3: Tiêu thụ và đồng bộ (Consumer & Apply)
Các tool như Spark Streaming hoặc Kafka Consumers liên tục lắng nghe Topic, nhận message, làm sạch data rồi apply vào Data Warehouse hoặc Data Lake cuối cùng.
3. Những "bẫy" cần tránh khi vận hành CDC
Nghe có vẻ ez nhưng thực tế triển khai CDC có mấy vấn đề cần lưu ý nhé:
Schema Evolution (Cấu trúc bảng thay đổi):
Khi dev hệ thống gốc thêm/xóa cột hoặc đổi kiểu dữ liệu, CDC connector phải tự nhận diện và update cấu trúc bên kho dữ liệu mà không được làm gián đoạn luồng chạy.
Idempotency (Tính chất không trùng lặp):
Phải đảm bảo nếu một message bị gửi nhiều lần do lỗi mạng thì hệ thống chỉ xử lý đúng 1 lần thôi. Không thì số liệu tài chính sai là bay màu đó!
Lời kết
Nguồn: tinhte.vn