Bỏ qua, tới nội dung

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

Batch và stream là gì? Hiểu nhanh qua một mô phỏng

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

Bài 1 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

  • Batch xử lý một tập dữ liệu đã chốt, theo lịch, rồi tắt. Rẻ và dễ làm đúng, nhưng kết quả đến muộn.
  • Stream xử lý từng sự kiện ngay khi nó đến và chạy 24/7. Kết quả nhanh, nhưng tốn máy và khó làm đúng hơn.
  • Câu hỏi để chọn: 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ùng một dòng dữ liệu có hai cách xử lý: gom lại rồi làm một lần, hoặc làm ngay khi dữ liệu vừa đến. Hai ví dụ bạn gặp hằng ngày:

  • Batch là sao kê cuối tháng. Ngân hàng gom mọi giao dịch của cả tháng, tính một lần rồi gửi bạn một bản sao kê.
  • Stream là tin nhắn biến động số dư. Mỗi lần bạn quẹt thẻ, tin nhắn đến sau vài giây vì hệ thống xử lý từng giao dịch ngay khi nó xảy ra.

Tự chạy thử: hai cách xử lý khác nhau thế nào?

Cả hai làn dưới đây nhận cùng các đơn hàng của một cửa hàng online. Làn Batch đợi đến nhịp rồi xử lý cả mẻ. Làn Stream xử lý từng đơn ngay khi nó đến.

Mô phỏng hai làn xử lý cùng một dòng đơn hàng. Kéo thanh trượt và bấm nút để thấy cái giá của mỗi cách.

Mô phỏng hai làn xử lý cùng một dòng đơn hàng. Kéo thanh trượt và bấm nút để thấy cái giá của mỗi cách.

Thử lần lượt:

  1. Kéo "Nhịp chạy của Batch" từ 8 lên 20 giây. Độ trễ của Batch tăng theo nhịp, còn Stream giữ nguyên.
  2. Bấm "Bùng nổ 30 đơn". Stream phải xếp hàng vì mỗi đơn cần một khoảng xử lý riêng. Batch gom cả cụm vào mẻ kế tiếp và xử lý gọn hơn.
  3. Nhìn dòng "Thời gian máy phải bật". Batch chỉ bật khi chạy mẻ. Stream phải bật liên tục để chờ đơn.
  4. Kéo "Đơn hàng đến" lên 12 đơn/giây. Stream không còn theo kịp và hàng đợi dài ra mãi.

Khác biệt gốc của batch và stream nằm ở đâu?

Khác biệt gốc nằm ở hình dạng của dữ liệu. Batch làm việc với dữ liệu hữu hạn (bounded), đã có điểm kết thúc, ví dụ toàn bộ đơn hàng ngày 25/10. Stream làm việc với dữ liệu vô hạn (unbounded), chưa biết khi nào dừng.

Batch processing hoạt động thế nào?

Batch xử lý một tập dữ liệu đã thu thập sẵn. Job bắt đầu, đọc toàn bộ dữ liệu của kỳ, tính toán, ghi kết quả rồi kết thúc. Lần chạy sau bắt đầu lại với tập dữ liệu mới.

  1. Nguồn dữ liệuDatabase, file, API
  2. Data lakeS3, GCS, Parquet
  3. Job theo lịchSpark, dbt
  4. Data warehouseBigQuery, Snowflake
  5. Báo cáo, MLBI, huấn luyện mô hình

Đặc điểm của batch:

  • Dữ liệu hữu hạn. Có điểm đầu và điểm cuối rõ ràng, ví dụ toàn bộ giao dịch của ngày hôm qua.
  • Chạy theo lịch. Mỗi đêm, mỗi giờ hoặc khi có yêu cầu. Giữa các lần chạy, máy có thể tắt.
  • Thông lượng cao. Đọc và tính cả khối lớn rất hiệu quả.
  • Độ trễ cao. Kết quả có sau vài phút, vài giờ hoặc sang ngày hôm sau.
  • Dễ chạy lại. Sai logic thì sửa rồi chạy lại trên cùng dữ liệu. Job idempotent cho kết quả giống nhau mỗi lần.

Ví dụ: tính lương, sao kê thẻ, hoá đơn tiền điện, báo cáo doanh thu ngày, đối soát thanh toán, huấn luyện mô hình học máy trên dữ liệu cả năm.

Stream processing hoạt động thế nào?

Stream coi dữ liệu là một dòng sự kiện không có điểm kết thúc. Mỗi sự kiện, như một lần quẹt thẻ hay một số đo cảm biến, được xử lý ngay khi đến, thường trong vài mili giây đến vài giây. Ứng dụng chạy liên tục và nhớ trạng thái giữa các sự kiện.

  1. Nguồn sự kiệnỨng dụng, IoT, log
  2. Message brokerKafka, Pulsar, Kinesis
  3. Stream processorFlink, Kafka Streams
  4. ĐíchDatabase, ClickHouse
  5. Hành độngCảnh báo, dashboard

Đặc điểm của stream:

  • Dữ liệu vô hạn. Sự kiện đến liên tục, không biết khi nào dừng.
  • Chạy liên tục 24/7. Máy phải luôn bật để chờ sự kiện.
  • Độ trễ thấp. Kết quả có sau mili giây đến vài giây.
  • Có trạng thái. Bộ đếm, tổng tiền, phiên đăng nhập được giữ lại giữa các sự kiện.
  • Khó làm đúng hơn. Phải xử lý thứ tự sự kiện, dữ liệu đến trễ, lỗi giữa chừng và tránh xử lý trùng.

Ví dụ: chặn giao dịch nghi gian lận, vị trí tài xế trên bản đồ, cảnh báo khi lỗi tăng đột biến, dashboard ngày khuyến mãi lớn, giám sát cảm biến nhà máy.

So sánh batch và stream

Tiêu chí Batch Stream
Dữ liệu Hữu hạn, đã chốt trước khi xử lý Vô hạn, đến liên tục
Khi nào chạy Theo lịch hoặc khi có yêu cầu Liên tục 24/7
Độ trễ kết quả Vài phút đến vài giờ Mili giây đến vài giây
Thông lượng Rất cao, tối ưu cho khối lớn Cao, nhưng mỗi sự kiện có chi phí riêng
Chi phí máy Bật khi chạy, tắt khi xong Luôn bật, cần dư tải cho giờ cao điểm
Độ phức tạp Thấp hơn, dễ kiểm tra Cao hơn: trạng thái, thứ tự, dữ liệu trễ
Khi gặp lỗi Chạy lại cả job, miễn là idempotent Khôi phục từ checkpoint và offset
Tính đầy đủ Thấy toàn bộ dữ liệu của kỳ Cập nhật dần, có thể chỉnh khi dữ liệu trễ đến

Hiểu lầm hay gặp

  • Stream không luôn tốt hơn. Nó tốn máy chạy liên tục và khó làm đúng hơn. Nếu người dùng chỉ xem báo cáo mỗi sáng thì batch rẻ và đơn giản hơn.
  • Có cách ở giữa: micro-batch. Spark Structured Streaming mặc định chia dòng thành các lô rất nhỏ. Flink xử lý từng sự kiện. Cả hai đều được gọi là streaming.
  • Real-time có nhiều mức. Dashboard cập nhật mỗi phút, cảnh báo trong 1 giây và chặn gian lận trong 100 mili giây là ba yêu cầu khác nhau, chi phí cũng khác. Hãy hỏi độ trễ chấp nhận được trước khi chọn công nghệ.

Mô phỏng ở trên là mô hình đơn giản hoá để thấy xu hướng, không phải số đo của một hệ thống thật.

Kiểm tra lại

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

  1. Ứng dụng ngân hàng gửi tin nhắn ngay sau khi bạn quẹt thẻ. Đó là cách xử lý nào?

    Xem đáp án

    Stream, vì mỗi giao dịch được xử lý ngay khi xảy ra. Tin nhắn phát sinh từ từng sự kiện giao dịch và đến sau vài giây. Đó là đặc trưng của stream. Sao kê cuối tháng mới là batch.

  2. Dữ liệu vô hạn (unbounded) nghĩa là gì?

    Xem đáp án

    Dữ liệu tiếp tục đến và chưa biết khi nào dừng. Vô hạn nói về việc dòng dữ liệu không có điểm kết thúc, không nói về dung lượng. Một file 10 TB vẫn là dữ liệu hữu hạn.

  3. Trong mô phỏng, đơn hàng đến dồn dập vượt khả năng xử lý. Làn stream gặp chuyện gì?

    Xem đáp án

    Hàng đợi dài ra, độ trễ tăng dần. Mỗi đơn cần một khoảng xử lý riêng. Khi đơn đến nhanh hơn tốc độ xử lý, hàng đợi dài ra. Thực tế ta thêm máy hoặc chia partition, và việc đó tốn thêm chi phí.

Nguồn