Streaming nâng cao: Flink, Exactly-once, Watermark¶
🟡 Trung bình · Streaming / Kafka
Flink vs Spark Streaming¶
| Tiêu chí | Spark Structured Streaming | Apache Flink |
|---|---|---|
| Mô hình | Micro-batch | True streaming (từng event) |
| Độ trễ | Giây | Mili-giây |
| State | Cơ bản | Mạnh (RocksDB backend) |
| Exactly-once | Có (checkpoint) | Có (checkpoint + 2PC) |
| Khi nào chọn | Team đã dùng Spark; độ trễ chấp nhận giây-phút | Cần low latency (mili-giây); true streaming; state management phức tạp |
Quy tắc chọn lựa¶
- Chọn Flink khi: cần độ trễ mili-giây, true streaming, state management mạnh (RocksDB), xử lý event phức tạp
- Chọn Spark khi: team đã dùng Spark cho batch (tái sử dụng code/skill), độ trễ giây-phút là chấp nhận được
Exactly-once vs At-least-once¶
- At-least-once: Xử lý ≥ 1 lần. Có thể trùng → cần dedup downstream.
- Exactly-once: Xử lý đúng 1 lần = Checkpoint + Idempotent write + Transaction.
Watermark¶
= "Tôi sẽ không chờ event cũ hơn mốc này nữa".
Set lâu hơn → bắt được nhiều late event NHƯNG state giữ lâu → tốn RAM, kết quả ra trễ.
Xử lý Duplicate / Late event / Job chết¶
| Vấn đề | Giải pháp |
|---|---|
| Kafka lag | Tăng consumer, tăng partition, tối ưu batch size |
| Late event | Watermark + side output / dead letter queue |
| Duplicate | Dedup theo event ID, idempotent processing |
| OOM | Tăng memory, tối ưu state |
| Data skew | Thay key phân vùng, salting |