ACADEMY/APACHE KAFKA 101
EVENT STREAMING, EXPLAINED SIMPLY ✦

Dữ liệu không
đứng yên.
Kafka cũng vậy.

Khám phá Apache Kafka từ con số 0 bằng ẩn dụ dễ hiểu, sơ đồ trực quan và một phòng lab nơi chính bạn điều khiển luồng dữ liệu.

Producer → Topic → ConsumerMột hành trình, hiểu trọn cốt lõi
01 / SOURCEProducerTạo sự kiện
02 / STREAMKafkaLưu & phân phối
03 / SINKConsumerXử lý sự kiện
EVENTS ARE FLOWING99.9% vibes / 100% learning
event.created ↗
offset++ ↗
07Chặng khám phá
01Playground tương tác
03Ví dụ code thực tế
0Cài đặt bắt buộc
?
Kafka là gì, trong một câu?

Apache Kafka là một nền tảng event streaming phân tán giúp hệ thống ghi nhận, lưu giữ và xử lý luồng sự kiện ở quy mô lớn. Khác hàng đợi xóa ngay khi nhận, event log của Kafka cho phép nhiều nhóm độc lập đọc lại bản ghi khi chúng vẫn còn được lưu.

DISTRIBUTED
EVENT STREAMING
ẨN DỤ ĐỜI THƯỜNG

Kafka giống một bưu điện có trí nhớ.

Producer gửi thư → Topic là loại hòm thư → Partition là các ngăn có thứ tự → Consumer đến đọc. Khác với bưu điện thường, thư không biến mất sau khi được đọc: Kafka giữ chúng theo chính sách lưu trữ, nên nhóm khác vẫn có thể đọc lại.

ANALOGY
NO. 001
02 / WHY KAFKA

Khi hệ thống lớn dần,
kết nối trực tiếp trở thành gánh nặng.

Trong monolith, nhiều nghiệp vụ nằm trong một ứng dụng. Khi tách thành nhiều dịch vụ, một đơn hàng mới có thể phải gọi thanh toán, kho, email, analytics… Kafka giúp các dịch vụ giao tiếp qua sự kiện thay vì phải gọi trực tiếp từng nơi.

TRƯỚC KIAKết nối chằng chịt

Point-to-Point / Đồng bộ

ORDER SERVICE
Payment ↙
Inventory ↙
Email ↙
Analytics ↙
  • Mỗi dịch vụ phải biết địa chỉ của nhiều dịch vụ khác.
  • Gọi đồng bộ có thể làm request chậm hoặc lỗi dây chuyền.
  • Thêm dịch vụ mới → phải sửa phía phát sự kiện.
Coupling cao ✕
VỚI KAFKAPub / Sub qua event log

Event-Driven Architecture

ORDER SERVICE
→
◉KAFKA
↗→↘
Payment
Inventory
Email
Analytics
  • Producer chỉ công bố OrderCreated vào Topic.
  • Mỗi Consumer Group xử lý với tốc độ và offset riêng.
  • Thêm dịch vụ mới mà không cần thay Producer.
Loose coupling ✓

Phân biệt: Monolith là cách tổ chức ứng dụng, còn point-to-point là kiểu giao tiếp. Một hệ thống microservices vẫn có thể dùng point-to-point; Kafka không tự động giải quyết mọi vấn đề và đổi lại là chi phí vận hành cùng tính nhất quán bất đồng bộ.

03 / CORE CONCEPTS

Bên trong hộp đen Kafka.

Hãy nhớ chuỗi cốt lõi: Producer ghi record vào một partition của topic trên broker; Consumer đọc theo offset và quản lý tiến độ theo group.

BẢN ĐỒ HỆ THỐNGLogical view · đơn giản hóa
Producerpublish()
→records
KAFKA CLUSTERBroker 1 · 2 · 3
Topic: orders.events
P0 [0][1][2]···
P1 [0][1][2]···
P2 [0][1][2]···
KRaft controllers ↔ quản lý metadata & leader
→poll()
Consumersgroup.id
Mỗi partition là một log có thứ tự; offset là vị trí trong từng partition, không phải số thứ tự toàn topic.
01 CORE

Broker

Máy chủ Kafka lưu các partition, phục vụ yêu cầu ghi/đọc. Cluster thường có nhiều broker để phân tán dữ liệu và nhân bản.

Ví như chi nhánh bưu điện.
02 CORE

Topic

Tên luồng sự kiện logic, ví dụ orders.events. Producer ghi vào topic; consumer subscribe topic.

Ví như loại hòm thư.
03 CORE

Partition

Đơn vị chia nhỏ topic thành các log. Record có thứ tự trong partition; nhiều partition cho phép song song.

Ví như ngăn thư có đánh số.
04 WRITE

Producer

Ứng dụng tạo và gửi record (key, value, timestamp). Key thường quyết định partition để cùng key giữ thứ tự cục bộ.

Ví như người gửi thư.
05 READ

Consumer

Ứng dụng chủ động poll() record và xử lý. Đọc record không xóa record khỏi Kafka.

Ví như người lấy thư ra đọc.
06 READ

Consumer Group

Các consumer chung group.id chia nhau partition. Tại một thời điểm, mỗi partition được gán cho tối đa một consumer trong group.

Ví như một đội phân công đọc thư.
07 STATE

Offset

Chỉ số tăng từ 0 trên từng partition. Committed offset đánh dấu vị trí đọc kế tiếp của group; có thể dùng để đọc lại.

Ví như dấu trang trong sổ.
08 CONTROL

KRaft / ZooKeeper

KRaft dùng quorum controller quản lý metadata theo cơ chế Raft. ZooKeeper là cơ chế cũ; Kafka 4.0+ chỉ hỗ trợ KRaft.

Ví như bộ phận điều hành bưu cục.
↗Ordering

Bảo đảm thứ tự trong một partition, không phải giữa các partition.

⟳Replay

Consumer có thể đọc lại dữ liệu còn trong thời hạn lưu trữ bằng cách đổi offset.

⧉Replication

Replica trên nhiều broker tăng khả năng chịu lỗi; sơ đồ lab không mô phỏng nhân bản.

04 / HANDS-ON LAB INTERACTIVE

Bạn là Kafka engineer.

Gửi sự kiện, chọn chiến lược phân partition, kéo dữ liệu về Consumer Group rồi quan sát offset và lag.

SIMULATION ONLINE in-memory · no backend
Event Stream PlaygroundCluster giả lập / 3 partitions
MESSAGES PRODUCED0Toàn topic
MESSAGES CONSUMED0Group đang chọn
CONSUMER LAG0Chưa đọc
ACTIVE PARTITIONS03 / 03orders.events
01 PRODUCER02 TOPIC / PARTITIONS03 CONSUMERS
WRITE EVENTS

Producer

Nội dung tối đa 1.000 ký tự
Mỗi lần gửi sẽ chọn partition kế tiếp, không phụ thuộc key.
APPEND-ONLY LOG

orders.events

3 PARTITIONS
Chưa consume Đã consume (group hiện tại)
Message vẫn nằm trong log sau khi consume. Offset và trạng thái đọc được tính riêng theo Consumer Group.
READ EVENTS

Consumer Group

PARTITION ASSIGNMENT DEMO
NEXT OFFSET / PARTITION
⌁ LIVE ACTIVITY
01
Thử cùng một key

Chuyển sang Key hash, gửi 3 lần với key order-1001: cả 3 sẽ vào cùng partition.

02
Thử 2 consumer groups

Consume trong billing-service, rồi đổi sang analytics-service: group mới có offset độc lập.

03
Thử 4 consumers

Có 3 partition và 4 consumers → một consumer sẽ không nhận partition nào.

Giới hạn mô phỏng: Đây là mô hình trong bộ nhớ của trình duyệt, không có Kafka broker thật, mạng, replica, transaction hay rebalance protocol thực. Round-robin được chọn để dễ học (không đại diện mặc định của mọi Kafka client); Key hash dùng FNV-1a minh họa, không phải thuật toán partitioner mặc định của Kafka Java. Nút Consume giả lập xử lý thành công và commit offset tức thì.

05 / REAL-WORLD PATTERNS

Kafka ngoài đời thực.

Bốn mẫu ứng dụng phổ biến. Mỗi card là một luồng event có thể gặp trong hệ thống sản phẩm thật.

↗01 / FINTECH

Thanh toán & đơn hàng

Khi đơn hàng được tạo, hệ thống phát OrderCreated. Billing, Inventory và Notifications đọc độc lập; mỗi nhóm theo dõi tiến độ riêng.

Checkout→orders.events→Billing
EXAMPLE EVENT
{"type":"OrderCreated",
 "orderId":"1001","amount":299000}
Lưu ý: idempotency và transaction/outbox giúp tránh xử lý thanh toán lặp.
≡02 / OBSERVABILITY

Thu thập log tập trung

Nhiều máy chủ đẩy log về một topic. Một nhóm consumer lưu vào hệ thống tìm kiếm; nhóm khác tạo cảnh báo lỗi theo thời gian thực.

Apps→app.logs→Search / Alert
EXAMPLE EVENT
{"service":"api-gateway",
 "level":"ERROR","status":503}
Lưu ý: kiểm soát dữ liệu nhạy cảm và retention của log.
◎03 / PRODUCT ANALYTICS

Tracking hành vi người dùng

Website phát ProductViewed, AddedToCart… Pipeline đẩy về kho dữ liệu để tính funnel và phân tích trải nghiệm.

Web / App→user.events→Warehouse
EXAMPLE EVENT
{"type":"ProductViewed",
 "userId":"u42","productId":"p9"}
Lưu ý: cân nhắc consent và loại bỏ PII không cần thiết.
⌁04 / STREAM PROCESSING

Xử lý dữ liệu thời gian thực

Kafka Streams/Flink đọc giao dịch liên tục, tổng hợp theo cửa sổ 1 phút, phát cảnh báo khi vượt ngưỡng rủi ro.

Transactions→Stream job→Alert
EXAMPLE EVENT
{"accountId":"a7","amount":5000,
 "eventTime":"2026-10-12T10:00:00Z"}
Lưu ý: windowing, sự kiện đến muộn và xử lý trùng.
06 / FROM LAB TO PRODUCTION

Chạm tay vào code thực.

Ba ví dụ tối giản để nối từ mô phỏng đến một cluster Kafka thật. Website này vẫn hoạt động offline mà không cần cài bất cứ thư viện nào.

producer.py
PYTHON 3
# Cần: pip install confluent-kafka
from confluent_kafka import Producer

producer = Producer({"bootstrap.servers": "localhost:9092"})

# Cùng key thường đi vào cùng một partition
producer.produce(
    topic="orders.events",
    key="order-1001",
    value='{"type":"OrderCreated","orderId":"1001"}'
)
producer.flush()  # Chờ gửi xong trước khi thoát
! Lab ≠ broker thật

Các snippet Python cần thư viện confluent-kafka và Kafka chạy ở localhost:9092; lệnh CLI cần bộ cài Kafka. Đây là ví dụ học tập, chưa có retry, schema validation hay production security.

07 / KNOWLEDGE CHECK

Bạn đã nắm vững chưa?

Kiểm tra nhanh 4 câu. Chọn đáp án để thấy giải thích ngay — không có áp lực điểm số.

MINI KNOWLEDGE CHECKQUESTION 01 / 04
Đúng 0 / 4
✦
Học xong không có nghĩa là dừng lại.

Hãy quay lại playground, thử thay key, group và số consumer. Khả năng dự đoán chính xác luồng message là dấu hiệu bạn đã thực sự hiểu Kafka.

Thực hành lại ↗