Tìm hiểu về Kafka(loading...)
Tìm hiểu về Kafka(loading...)
Tìm hiểu về Kafka(loading…)
Các khái niệm chính:
- Producer: Các ứng dụng gửi dữ liệu vào Kafka
- Consumer: Các ứng dụng đọc dữ liệu từ Kafka
- Topic: Nơi phân loại các loại tin nhắn khác nhau
- BrokerL: Máy chủ lưu trữ và phân phối tin nhắn
Case Study
Bước 1: Producer gửi dữ liệu
1
2
3
4
5
6
7
Website → Khách hàng đặt pizza
{
"order_id": "ORD001",
"customer": "Nguyễn Văn A",
"pizza": "Margherita",
"price": 150000
}
Bước 2: Kafka nhận và phân phối
1
2
3
4
Kafka nhìn vào "order_id": "ORD001"
→ Tính hash: hash("ORD001") = 1
→ Gửi vào Partition 1 của Topic "orders"
→ Lưu ở Broker 2 (nơi có Partition 1)
Bước 3: Consumer xử lý
1
2
3
4
5
6
7
8
9
10
11
Consumer A (Inventory Service):
- Đọc từ Partition 1
- "Cần pizza Margherita → Kiểm tra kho"
Consumer B (Payment Service):
- Đọc từ Partition 1
- "150,000 VNĐ → Xử lý thanh toán"
Consumer C (Email Service):
- Đọc từ Partition 1
- "Gửi email xác nhận cho Nguyễn Văn A"
Tại sao lại thiết kế như vậy?
- 3 consumer xử lý
song song
- Giúp bảo toàn dữ liệu
- Dễ mở rộng
So sánh với cách làm truyền thống
1
2
3
4
5
6
7
Đơn hàng 1 → Kho → Thanh toán → Email → ✅ (3 giây)
↓
Đơn hàng 2 → Kho → Thanh toán → Email → ✅ (6 giây)
↓
Đơn hàng 3 → Kho → Thanh toán → Email → ✅ (9 giây)
Xử lý 1000 đơn = 3000 giây = 50 phút!
Với Kafka
1
2
3
4
5
Đơn hàng 1 → Topic "orders" → Kho ↘
Đơn hàng 2 → Topic "orders" → Thanh toán → Cùng lúc!
Đơn hàng 3 → Topic "orders" → Email ↗
Xử lý 1000 đơn = 1000 giây = 16 phút!
So sánh cụ thể hơn:
1
2
3
API → Database → Email → SMS → Push Notification
↓ ↓ ↓ ↓ ↓
1s → 2s → 1s → 0.5s → 0.5s = 5s/đơn hàng
Với Kafka
1
2
3
4
5
6
API → Kafka Topic → Database (2s)
↓ → Email (1s)
↓ → SMS (0.5s) ← Cùng lúc!
↓ → Push (0.5s)
Tổng thời gian = max(2s, 1s, 0.5s, 0.5s) = 2s/đơn hàng
Lợi ích khác:
- Khả năng chịu lỗi:
1
2
Truyền thống: Email service lỗi → Cả hệ thống dừng
Kafka: Email service lỗi → Kho + Thanh toán vẫn chạy bình thường
This post is licensed under CC BY 4.0 by the author.