# Nên chọn batch hay stream cho bài toán của bạn?

> Chọn một bài toán thực tế để xem nên dùng batch, stream hay kết hợp cả hai và vì sao. Kèm quy tắc chọn nhanh và hai kiến trúc Lambda, Kappa.

Canonical URL: https://learn.chabulab.com/vi/system-design/chon-batch-hay-stream. Kiểm tra thông tin: 2026-11-03.

- Hỏi trước: nếu kết quả chậm một giờ, có ai thiệt không? Không thì bắt đầu với batch, có thì cần stream.
- Nhiều hệ thống dùng cả hai: batch cho kết quả chính xác, stream cho kết quả nhanh.
- Lambda chạy hai đường song song và phải giữ hai bản logic. Kappa chỉ có một đường stream và phát lại log khi cần tính lại.

Công nghệ đến sau. Trước hết hãy biết bài toán của bạn chịu được độ trễ bao nhiêu.

## Bài toán của bạn hợp cách nào?

Chọn một bài toán để xem nên dùng batch, stream hay kết hợp cả hai, và vì sao.

*Chín bài toán thực tế, mỗi bài kèm độ trễ chấp nhận được, lý do và công nghệ gợi ý.*

## Quy tắc chọn nhanh là gì?

Hãy hỏi: **"Nếu kết quả chậm một giờ, có ai thiệt không?"**

- Không ai thiệt: bắt đầu với batch.
- Có người thiệt: bạn cần stream.
- Đúng ở cả hai phần khác nhau của hệ thống: kết hợp cả hai.

Với stream, hỏi tiếp độ trễ chấp nhận được là bao nhiêu. Dashboard cập nhật mỗi phút không cần cùng công nghệ với việc chặn gian lận trong 100 mili giây.

## Khi cần cả hai, kiến trúc Lambda hoạt động thế nào?

Lambda chạy hai đường song song. Đường batch tính lại toàn bộ lịch sử cho kết quả chính xác. Đường speed xử lý dữ liệu mới nhất cho kết quả nhanh. Serving layer gộp hai kết quả lại.

Nguồn dữ liệu → Batch layer → Batch view → Serving

Nguồn dữ liệu → Speed layer → Realtime view → Serving

Nhược điểm: bạn phải viết và bảo trì hai bản logic cho cùng một phép tính.

## Kiến trúc Kappa khác gì?

Kappa chỉ có một đường stream. Mọi sự kiện nằm trong log giữ lâu. Muốn tính lại lịch sử, bạn phát lại log qua một job stream mới.

Nguồn sự kiện → Log giữ lâu → Stream processor → Serving

Nhược điểm: log phải giữ đủ lâu và engine stream phải đủ mạnh để chạy lại khối lượng lớn. Nhiều đội ngày nay dùng thêm lakehouse để batch và stream đọc chung một bảng.

## Sai lầm hay gặp khi chọn

- **Chọn stream vì nghe hiện đại.** Nếu không ai cần kết quả ngay, bạn trả thêm tiền máy và độ phức tạp mà không được gì.
- **Không hỏi độ trễ chấp nhận được.** "Real-time" chưa phải yêu cầu. Một con số như "dưới 10 giây" mới là yêu cầu.
- **Dựng Lambda ngay từ đầu.** Hai bản logic rất tốn công giữ cho khớp. Chỉ thêm đường thứ hai khi đã có lý do đo được.
- **Quên rằng batch vẫn có thể rất thường xuyên.** Chạy mỗi 5 phút thường đủ cho nhiều nhu cầu "gần thời gian thực".

## Kiểm tra lại

1. Tính lương cho 5.000 nhân viên vào ngày 30 hằng tháng. Cách nào hợp nhất?
   Xem đáp án: Batch chạy một lần khi đã chốt công. Dữ liệu chỉ đầy đủ sau khi chốt kỳ và không ai cần kết quả trong vài giây. Batch rẻ hơn, dễ kiểm tra và chạy lại hơn.
2. Vì sao gợi ý sản phẩm thường dùng cả batch và stream?
   Xem đáp án: Vì mô hình học từ lịch sử, còn hành vi vừa xảy ra cần cập nhật ngay. Huấn luyện mô hình là việc nặng thông lượng nên hợp batch. Sản phẩm khách vừa xem là tín hiệu nóng, cần stream.
3. Nhược điểm chính của kiến trúc Lambda là gì?
   Xem đáp án: Phải viết và bảo trì hai bản logic cho cùng một phép tính. Đường batch và đường speed đều tính cùng một thứ nhưng bằng hai bản code khác nhau. Kappa ra đời để bỏ bớt một bản.

## Nguồn

- [Apache Kafka: giới thiệu và các trường hợp sử dụng](https://kafka.apache.org/documentation/#uses)
- [Apache Iceberg: đọc và ghi chung một bảng](https://iceberg.apache.org/docs/latest/)
