Đang tải...

Bài 2: Mổ xẻ Topic — Bí mật của tốc độ (Partitions & Offsets)

22/05/2026
4 phút đọc
Bài 2: Mổ xẻ Topic — Bí mật của tốc độ (Partitions & Offsets)
Để Kafka có thể xử lý hàng triệu tin nhắn mỗi giây, một Topic không bao giờ đứng nguyên một khối. Nó được băm nhỏ ra. ### 1. Partition (Phân vùng) là gì? Khi ...

Để Kafka có thể xử lý hàng triệu tin nhắn mỗi giây, một Topic không bao giờ đứng nguyên một khối. Nó được băm nhỏ ra.

1. Partition (Phân vùng) là gì?

Khi bạn tạo ra một Topic, Kafka sẽ chia Topic đó thành nhiều phần nhỏ hơn gọi là Partition.

Hãy tưởng tượng Topic là một con đường cao tốc:

  • Nếu con đường chỉ có 1 làn xe (1 Partition), các xe (tin nhắn) phải nối đuôi nhau đi rất chậm.
  • Nếu bạn mở rộng thành đường 4 làn xe (4 Partitions), số lượng xe có thể lưu thông cùng lúc tăng lên gấp 4 lần.

Nhờ có Partition, nhiều Consumer có thể cùng lúc đọc dữ liệu từ một Topic (mỗi Consumer đọc một Partition khác nhau) mà không bị "giẫm chân" lên nhau. Đây chính là chìa khóa để Kafka mở rộng theo chiều ngang (Scale-out).

2. Offset (Chỉ mục) là gì?

Khi một Message được Producer gửi vào một Partition, nó sẽ được Kafka "đóng dấu" cho một số thứ tự tăng dần. Số thứ tự này gọi là Offset.

  • Tin nhắn đầu tiên vào Partition 0 sẽ có Offset là 0.
  • Tin nhắn tiếp theo vào Partition 0 sẽ có Offset là 1, 2, 3... và cứ thế tăng mãi.

Đặc điểm sống còn của Offset:

  • Offset là duy nhất trong một Partition.
  • Nó giống như số thứ tự bạn bốc khi đi ngân hàng. Nhờ có Offset, Consumer biết được mình đã đọc đến tin nhắn nào. Nếu Consumer bị sập, khi khởi động lại, nó chỉ cần tìm đúng cái Offset cuối cùng nó đã đọc và đọc tiếp.

3. Ba "Luật bất thành văn" của Kafka bạn phải nhớ

Là một Backend Developer, đây là những điểm bạn cần lưu ý kỹ để không thiết kế sai logic:

  1. Dữ liệu không bao giờ bị xóa ngay: Khác với các hệ thống Message Broker truyền thống (như RabbitMQ) thường xóa tin nhắn ngay sau khi Consumer đọc xong. Kafka lưu dữ liệu vào ổ cứng (Append-only log) và giữ lại trong một khoảng thời gian cấu hình trước (ví dụ: 7 ngày), bất kể đã có ai đọc hay chưa.
  2. Tính bất biến (Immutable): Tin nhắn một khi đã được ghi vào Partition thì không thể bị sửa đổi. Bạn không thể "update" một tin nhắn có Offset = 2
  3. hứ tự chỉ được đảm bảo trong CÙNG một Partition: Kafka đảm bảo tin nhắn gửi trước sẽ được nhận trước, nhưng điều này chỉ đúng đối với các tin nhắn nằm trong cùng một Partition. Nếu bạn đọc dữ liệu từ toàn bộ Topic (gồm nhiều Partition), thứ tự các tin nhắn nhận được có thể bị xáo trộn.

Bài toán thực tế: Giả sử bạn có hệ thống giao dịch ngân hàng. Bạn muốn các tin nhắn cập nhật số dư của cùng một tài khoản (VD: Tài khoản A nạp 100k, rồi rút 50k) phải được xử lý đúng thứ tự.

📚 Nguồn: Viblo

Bình luận

0 bình luận

Email không hiển thị công khai.

Chưa có bình luận nào. Hãy là người đầu tiên bình luận.

Chia sẻ bài viết

Cần tư vấn?

Liên hệ với chúng tôi để được hỗ trợ

Liên hệ ngay

Bài viết liên quan

Proxy hoạt động ở tầng nào trong mô hình TCP/IP? HTTP Proxy Và SOCKS5 nằm ở đâu?
09/06/2026

Proxy hoạt động ở tầng nào trong mô hình TCP/IP? HTTP Proxy Và SOCKS5 nằm ở đâu?

Proxy hoạt động ở tầng nào? Sau khi đã đi qua các tầng mạng như Physical Layer, Data Link Layer, Internet Layer, Transport Layer và Application Layer, ta có thể nhìn Proxy rõ ...

Đọc thêm
Red Team RAG: Khi mỗi pipeline là một đường hầm tối – Phần 2: Đầu độc dòng chảy – Từ ingestion đến sụp đổ
09/06/2026

Red Team RAG: Khi mỗi pipeline là một đường hầm tối – Phần 2: Đầu độc dòng chảy – Từ ingestion đến sụp đổ

## Lời mở đầu: Bạn đã vào hầm. Bây giờ, hãy đầu độc dòng nước. Ở phần 1, chúng ta đã đứng trước **cửa hầm**, học cách đọc bản đồ pipeline RAG, v...

Đọc thêm
Vì sao giá trị truyền thống luôn được đặt lên hàng đầu
09/06/2026

Vì sao giá trị truyền thống luôn được đặt lên hàng đầu

Giá trị truyền thống không chỉ là yếu tố mang tính hoài niệm, mà còn đóng vai trò nền tảng trong việc định hình bản sắc và chiều sâu của một công trình ...

Đọc thêm

Bắt đầu dự án của bạn

Hãy để Flash Dev đồng hành cùng bạn

Liên hệ ngay