Chuyển đến nội dung
Topic, partition và key: Kafka giữ thứ tự ở đâu?

Topic, partition và key: Kafka giữ thứ tự ở đâu?

Đơn 101 có hai sự kiện: created rồi paid. Bạn muốn consumer nhìn thấy chúng theo đúng thứ tự. Kafka có thứ tự offset trong từng partition; không có một thứ tự toàn cục giữa mọi partition của topic.

Topic chứa nhiều log

Topic là tên luồng, chẳng hạn order-events. Partition là một log bên trong topic. Một record có key và value; producer chọn partition theo cơ chế partitioning của client, trừ khi ứng dụng chỉ định partition trực tiếp.

Giả sử ta đã gán như sau, đây là ví dụ kiểm tra bằng tay, không phải kết quả hash mặc định:

Partition Offset Key Sự kiện
P0 0 101 created
P0 1 101 paid
P1 0 102 created
P1 1 102 cancelled

Consumer P0 đọc created trước paid. Nhưng không thể so offset 1 của P0 với offset 0 của P1 để kết luận sự kiện nào xảy ra trước. Offset chỉ có nghĩa trong một topic-partition.

Chọn key theo điều cần giữ cùng nhau

Nếu cần thứ tự thay đổi của từng đơn, order_id thường là key phù hợp. Nếu key là cửa hàng, tất cả đơn của cửa hàng lớn có thể dồn về một partition và tạo điểm nóng. Nếu không có key, đừng dựa vào việc các sự kiện cùng đơn tự đi về cùng partition.

Ngay cả với key, vẫn phải kiểm tra producer/client, số partition và cách gửi. Tăng số partition có thể đổi ánh xạ key cho record mới; dữ liệu cũ không tự chuyển nơi. Hai producer cũng có thể gửi các sự kiện theo thứ tự khác thời gian nghiệp vụ. Giữ partition order không có nghĩa timestamp luôn tăng.

Đối chiếu trước khi tăng partition

Trong bảng trên có hai partition, consumer group kiểu thông thường có tối đa hai consumer cùng đọc tích cực. Thêm consumer thứ ba không chia một partition thành hai phần. Muốn xử lý nhanh hơn cần xem key, số partition, tốc độ sink và chiến lược xử lý trong consumer.

Bài tổng quan dùng một partition nên hai record giữ thứ tự ghi. Nó không kiểm chứng mọi partitioner hoặc client. Khi gặp thứ tự sai, kiểm tra key, partition, retries và thứ tự gửi trước khi sort tất cả theo timestamp.

Tài liệu gốc

Kafka producer configuration 4.0 mô tả partitioner, key và điều kiện giữ thứ tự khi retry. Đối chiếu ngày 1/10/2026.