0

Bài 2: Topic và Partition – Đừng để đĩa lạc rang bay nhầm sang bàn lẩu!

Chào người anh em! Sau bài 1, chắc ông cũng đã hình dung ra cái "bảng ghim" Kafka thần thánh giúp quán nhậu của mình vận hành trơn tru rồi đúng không?

Hôm nay, khách khứa kéo đến đông gấp đôi. Cái bảng ghim bắt đầu loạn cào cào: Giấy gọi bia dán đè lên giấy gọi lạc rang, đầu bếp món xào lại bốc nhầm đơn đồ nướng. Quán bắt đầu rối!

Đã đến lúc chúng ta cần đến Bài 2: Topic và Partition - Nghệ thuật "chia ngăn" và "phân thân" của Kafka.

Để giải quyết đống lộn xộn trên cái bảng ghim, ông quyết định dùng bút màu chia cái bảng đó thành từng khu vực riêng biệt.

1. Topic: "Khu vực nào ra khu vực đó"

Trong Kafka, cái này gọi là Topic. Ông kẻ một đường thật đậm:

  • Khu bên trái: Chỉ dán đơn Đồ Uống.
  • Khu ở giữa: Chỉ dán đơn Món Xào.
  • Khu bên phải: Chỉ dán đơn Món Nướng.

Cái Topic này thực chất là một cái "thùng" logic để phân loại dữ liệu. Producer (khách/nhân viên chạy bàn) khi ném dữ liệu vào Kafka phải biết rõ mình đang ném vào đâu. Không ai đi ném đơn "Bia hơi" vào Topic Món_Nướng cả, đúng không?

Bài học rút ra: Topic giúp hệ thống của ông ngăn nắp. Service thanh toán thì đọc Topic Orders, Service gửi Mail thì đọc Topic Notifications. Đời cứ thế mà êm đềm.

2. Partition: "Khi một khu vực là không đủ"

Chuyện chưa dừng lại ở đó. Cái khu vực Món Xào (Topic) của ông bỗng nhiên quá tải vì khách gọi cơm rang nhiều quá. Một đầu bếp làm không kịp, mà hai đầu bếp cùng bu vào một cái khu vực nhỏ xíu để giật giấy thì... húc đầu vào nhau.

Thế là ông nảy ra tối kiến: Chia khu vực Món Xào thành 3 cột nhỏ bằng nhau.

  • Cột 1: Cho đầu bếp A.
  • Cột 2: Cho đầu bếp B.
  • Cột 3: Cho đầu bếp C.

Mỗi cột nhỏ này chính là một Partition.

Tại sao Partition lại là "vũ khí tối thượng"?

  • **Phân thân (Parallelism): **Thay vì một mình ông đầu bếp "cân" cả Topic, giờ ông có 3 ông cùng làm một lúc ở 3 Partition khác nhau. Tốc độ xử lý tăng gấp 3!
  • Thứ tự (Ordering): Đây là chỗ "khoai" nhất nè. Trong một Partition, tờ giấy nào ghim trước thì được nấu trước. Nhưng giữa các Partition với nhau thì... hên xui. Đầu bếp ở Cột 3 có thể tay nhanh hơn đầu bếp ở Cột 1. Nên nếu ông muốn khách gọi trước được ăn trước 100%, ông phải tống hết đơn của khách đó vào cùng một Partition.

"Ủa, vậy làm sao biết đơn nào vào Partition nào?"

Đây là lúc vai trò của người ghi order (Producer) tỏa sáng. Có 2 cách:

  1. Chọn bừa (Round-robin): Cứ ghim lần lượt: Cột 1 -> Cột 2 -> Cột 3 rồi quay lại 1. Cách này giúp việc làm đều, không ông đầu bếp nào tị nạnh nhau.
  2. Chọn theo số bàn (Key-based): Ông quy định: "Tất cả đơn của Bàn số 5 phải vào Cột 1". Việc này giúp đảm bảo thứ tự món ăn cho riêng bàn đó.

Chốt hạ bài học hôm nay:

  • Topic: Là cái tiêu đề (Ví dụ: Đơn hàng, Log hệ thống, Tin nhắn chat).
  • Partition: Là cách chia nhỏ Topic ra để nhiều "thằng" cùng nhảy vào xử lý một lúc cho nhanh.

Lời nhắn nhủ: Nếu hệ thống của ông chậm, đừng vội chửi Kafka. Hãy xem lại ông đã chia bao nhiêu Partition? Có ông đầu bếp nào đang ngồi chơi xơi nước trong khi ông khác làm hì hục không?

Bài 2 tới đây là đủ "thấm" rồi. Bài 3 tôi sẽ kể cho ông nghe về đội ngũ Consumer Group - Những ông đầu bếp "phối hợp tác chiến" kinh điển như thế nào để không bao giờ nấu trùng món.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí