Hệ thống Dữ liệu Phái sinh/Module 2 — Xử lý stream: tổng quan
8/21
Bài 8 / 21~10 phútXử lý stream (stream processing)Miễn phí lượt xem

Module 2 — Xử lý stream: tổng quan

Xử lý dòng sự kiện vô tận thay vì khối cố định: log-based broker (Kafka), windowing, stream join và exactly-once. Mặt còn lại của batch ở Module 1.

TL;DR: Module 2 lật sang mặt còn lại của xử lý dữ liệu: khi input là một dòng sự kiện vô tận (unbounded) thay vì khối cố định. Bạn đi từ tư duy stream, qua log-based broker (Kafka: log chỉ-append + offset, nhiều consumer đọc độc lập), tới windowing (cắt dòng vô tận thành cửa sổ, với event-time và watermark cho event trễ), và stream join + exactly-once (idempotent + atomic commit). Nhiều ý tưởng batch ở Module 1 được tái dùng ở tầng thời gian thực — kỷ luật bất biến giờ thành "log chỉ append".

Vì sao module này tồn tại

Batch (Module 1) trả kết quả sau khi gom đủ một khối — độ trễ phút tới giờ. Nhưng phát hiện gian lận, cảnh báo hệ thống, hay bảng xếp hạng "đang diễn ra" không chờ được tới mẻ đêm. Stream xử lý từng sự kiện khi nó tới, cho độ trễ mili giây tới giây. Cái khó: dòng vô tận không có "điểm kết thúc" để tính một kết quả, và sự kiện tới không đúng thứ tự, đôi khi trễ. Module này dựng công cụ để xử lý đúng bất chấp hai khó khăn đó.

Sau module này bạn sẽ

  • Explain mô hình stream (event, producer/consumer) và vì sao input unbounded đổi cách xử lý so với batch.
  • Compare message broker truyền thống (xoá sau đọc) với log-based broker (Kafka giữ log + offset).
  • Design windowing và stream join, lập luận xử lý event trễ bằng event-time và watermark.
  • Explain đảm bảo exactly-once qua idempotent + atomic commit, và fault tolerance của stream.

Lộ trình module

flowchart LR
  L1["01 Tu duy stream<br/>event, unbounded"] --> L2["02 Log-based broker<br/>Kafka, offset"]
  L2 --> L3["03 Windowing<br/>event-time, watermark"]
  L3 --> L4["04 Stream join<br/>+ exactly-once"]
  L4 --> L5["05 Lab<br/>tu thiet ke pipeline"]

Bắt đầu ở bài 01 — Tư duy stream: vì sao dòng vô tận đổi hẳn cách thiết kế so với batch. Bài 02 — Log-based broker so message broker truyền thống (xoá sau đọc) với Kafka (giữ log + offset, nhiều consumer độc lập). Bài 03 — Windowing cắt dòng vô tận thành cửa sổ, phân biệt event-time và processing-time, và dùng watermark cho event trễ. Bài 04 — Stream join & exactly-once ghép hai luồng và đảm bảo "xử lý đúng một lần". Bài 05 — Lab tổng hợp: bạn tự thiết kế một stream pipeline real-time.

Yêu cầu trước khi bắt đầu

Time budget

  • Module: ~1.1 giờ đọc + lab.
  • 01–04 mỗi bài 11–13 phút; 05 (lab) ~14 phút; recap ~9 phút.

Cách học module này hiệu quả

  • Giữ một câu hỏi xuyên suốt: "sự kiện này tới trễ thì hệ xử lý ra sao — bỏ, đợi, hay tính lại?"
  • Với mỗi bài "đoán output" hoặc thiết kế, dừng lại dự đoán trước khi đọc tiếp.
  • Liên tục đối chiếu với batch (Module 1): mỗi khái niệm stream có một "người anh em" batch — thấy được cặp đó là hiểu sâu.

Bài tiếp theo: Tư duy stream — event, input vô tận, xử lý liên tục

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên