Xử lý batch và xử lý stream
Đáp án mẫu
Xử lý batch thu thập dữ liệu trong một khoảng thời gian rồi xử lý một lần trên tập dữ liệu hữu hạn, ví dụ job chạy hằng đêm. Cách này đơn giản, hiệu quả với khối lượng lớn và dễ thử lại. Độ trễ từ vài phút đến vài giờ. Công cụ điển hình là Spark và các job SQL trên kho dữ liệu.
Xử lý stream xử lý sự kiện liên tục ngay khi chúng đến, trên tập dữ liệu không giới hạn, với độ trễ từ mili giây đến vài giây. Công cụ điển hình là Kafka với Flink, Spark Structured Streaming hoặc Kafka Streams. Phù hợp với phát hiện gian lận, dashboard trực tiếp và cảnh báo.
Streaming thêm các bài toán khó hơn: event time và processing time, sự kiện đến trễ hoặc sai thứ tự được xử lý bằng watermark và window, quản lý state, và đảm bảo giao nhận (at-least-once kèm ghi idempotent, hoặc exactly-once ở nơi được hỗ trợ).
Chọn theo độ trễ mà doanh nghiệp thực sự cần. Nhiều trường hợp được phục vụ tốt bằng micro-batch tần suất cao. Một số hệ thống kết hợp cả hai, batch cho dữ liệu lịch sử và stream cho dữ liệu mới. Đừng trả giá phức tạp của streaming khi độ mới theo ngày là đủ.
Ý chính
- Batch: dữ liệu hữu hạn, độ trễ cao hơn, đơn giản và hiệu quả
- Stream: sự kiện không giới hạn, độ trễ thấp, xử lý liên tục
- Streaming cần event time, watermark, window và xử lý state
- Chọn theo độ trễ mà doanh nghiệp cần
Câu hỏi nối tiếp thường gặp
- Watermark là gì và vì sao cần nó?
- Bạn xử lý bản ghi trùng trong stream at-least-once như thế nào?
Lỗi thường gặp
- Chọn streaming trong khi độ mới theo ngày là đủ
- Dùng processing time trong khi nghiệp vụ cần event time