Bỏ qua, tới nội dung

Learn · Xử lý dữ liệu: batch và stream · Bài 2 trên 6

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

2 phútCơ bảnKiểm tra thông tin: Read in English

Bài 2 trên 6 · Xử lý dữ liệu: batch và stream
  1. Batch và stream là gì? Hiểu nhanh qua một mô phỏng
  2. Nên chọn batch hay stream cho bài toán của bạn?
  3. Cửa sổ thời gian, event time và dữ liệu đến trễ trong stream
  4. Công nghệ xử lý dữ liệu: chọn gì theo ngôn ngữ và cloud
  5. Dựng pipeline xử lý dữ liệu rẻ bằng TypeScript trên Cloudflare, AWS
  6. Dựng pipeline batch bằng Spark và stream bằng Kafka, Flink

Tóm tắt

  • 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 ý.

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.

  1. Nguồn dữ liệuMọi sự kiện
  2. Batch layerSpark, mỗi đêm
  3. Batch viewChính xác, chậm
  4. ServingGộp để truy vấn
  1. Nguồn dữ liệuMọi sự kiện
  2. Speed layerFlink, liên tục
  3. Realtime viewNhanh, tạm thời
  4. ServingGộp để truy vấn

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.

  1. Nguồn sự kiệnỨng dụng, dịch vụ
  2. Log giữ lâuKafka, lưu nhiều ngày
  3. Stream processorSửa logic thì phát lại log
  4. ServingDatabase, OLAP

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

Chọn một đáp án để xem vì sao đúng hay sai.

  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