Message Queue 30/08/2026 9 phút

Một tin không đọc nổi khiến consumer ném 8.306.744 ngoại lệ trong 12 giây và khoá cứng cả partition — một vòng thử-lại không chờ không phải là suy thoái, nó là tan chảy

Kafka coi mọi tin là mảng byte, nên đổi lược đồ là trách nhiệm của bạn. Tôi đo cái giá khi làm sai: một tin sai kiểu khiến consumer quay ở 692 nghìn ngoại lệ mỗi giây, đốt trọn một nhân CPU, và partition đứng vĩnh viễn ở offset đó. Bảy dòng chữa nó — và cái bẫy thật là một vòng bắt-lỗi lặp lại ngay thao tác vừa hỏng.

Message Queue 30/08/2026 8 phút

Bỏ ZooKeeper, cả ngăn xếp Kafka dựng trong 2,8 giây thay vì 26,3 — nhưng KRaft không xoá quorum, nó chỉ dời quorum vào trong Kafka

Suốt mười năm Kafka cần ZooKeeper; từ 4.0 thì không. Tôi dựng cả hai kiểu cạnh nhau: KRaft nhanh gấp chín lần, nhẹ hơn, bớt một tiến trình. Nhưng bài học đáng nhớ hơn là khi ZooKeeper chết, Kafka vẫn ghi đọc bình thường — chỉ mặt phẳng điều khiển dừng — và bỏ ZooKeeper không có nghĩa bỏ được yêu cầu đa số 2f+1.

Message Queue 30/08/2026 9 phút

Xoá sạch bộ đệm trang rồi bắt Kafka đọc lại — chỉ chậm đi 1,6 lần, không phải 100 lần; vì đọc tuần tự thì trượt đệm gần như không đau

Kafka hay được khen nhanh nhờ 'zero-copy' và 'page cache', hai cụm từ ít khi được đo. Tôi đo cả hai: một broker 1,2 GB phục vụ 1.130 MB/giây, và khi xoá sạch bộ đệm trang, đọc lạnh chỉ chậm 1,6 lần chứ không phải hai bậc độ lớn — vì Kafka đọc tuần tự, và với truy cập tuần tự thì bộ đệm gần như là tuỳ chọn.

Message Queue 30/08/2026 8 phút

Đặt retention.ms = 20 giây, tin vẫn sống tới 70 giây; đặt retention.bytes = 1 MB, đĩa dùng thật 3,56 MB — hai tham số giữ tin đều không làm đúng cái tên

retention.ms là mức *sàn*, không phải hạn chót: việc dọn chạy theo chu kỳ 5 phút và chỉ xoá nguyên cả segment. retention.bytes tính theo từng partition và làm tròn lên một segment, nên đĩa thật gấp 3,4 lần con số bạn viết. Đây là công thức dự trù đĩa đúng, và vì sao 'xoá sau 30 ngày' không phải một bảo đảm tuân thủ.

Message Queue 30/08/2026 9 phút

63 dòng chỉ mục cho 4.992 tin, và đọc offset 49.000 nhanh y như đọc offset 0 — bí mật là một chỉ mục thưa đến mức bất ngờ

Kafka nhanh vì gần như không làm gì phức tạp trên đĩa. Tôi mở tệp .index ra đọc từng dòng: một segment 4.992 tin chỉ có 63 mục — một dòng cho ~79 tin. Đủ để nhảy gần đúng rồi quét nốt, nên tìm một offset bất kỳ gần như miễn phí. Đây là đánh đổi chỉ mục thưa, và vì sao đọc lại từ giữa log không tốn gì.

Message Queue 30/08/2026 8 phút

Gửi 1 đến 12 đúng thứ tự, consumer nhận về 1-5-9-2-3-4 — và tăng số partition làm 9 trong 20 khoá đổi chỗ vĩnh viễn, phá thứ tự không cách nào sửa

'Kafka giữ thứ tự tin nhắn' đúng một nửa, và nửa sai là nửa gây sự cố. Tôi đo: thứ tự chỉ được bảo đảm trong một partition, không phải trong một topic. Và vì khoá định tuyến bằng băm chia lấy dư cho số partition, tăng partition làm gần một nửa khoá chuyển chỗ — tin cũ và tin mới của cùng một khoá rơi vào hai partition khác nhau, thứ tự vỡ vĩnh viễn.