Lập trình 22/09/2026 8 phút

Tổng kết sê-ri Bảo mật web: ánh xạ 11 lỗ hổng vào OWASP Top 10, checklist production và cây quyết định review

Mười một bài, mười một lỗ hổng tái hiện trong lab — giờ ghép lại thành một bản đồ dùng được. Bài tổng kết này ánh xạ từng lỗ hổng vào OWASP Top 10:2021 để bạn thấy bức tranh rủi ro, kèm một checklist chạy trước khi lên production và một cây quyết định dán cạnh màn hình khi review code: input vào SQL thì prepared statement, ra HTML thì escape, là id đối tượng thì kiểm sở hữu. Phòng thủ, không tấn công.

Lập trình 22/09/2026 7 phút

Kafka cho backend từ con số 0: vì sao nó là cuốn sổ ghi, không phải hàng đợi — và nửa triệu message/giây trên một node

Nhiều người tưởng Kafka là một message queue nhanh hơn. Hiểu vậy là bỏ lỡ điểm cốt lõi: Kafka là một append-only log — message không bị xoá sau khi đọc, nhiều consumer đọc độc lập, và đọc lại được từ đầu. Bài mở màn sê-ri dựng broker KRaft single-node thật trong Docker, produce/consume, chứng minh log không mất bằng cách consume hai lần, và đo throughput thật: 527.983 bản ghi/giây (50 MB/giây) trên đúng một node.

Lập trình 22/09/2026 6 phút

Partition trong Kafka: vì sao key quyết định thứ tự, và 6 partition cho throughput gấp đôi

Partition là đơn vị song song của Kafka — nhưng nó cũng là nơi mọi hiểu lầm về thứ tự bắt đầu. Bài này đo thật trong lab: cùng một key luôn rơi vào cùng một partition (nên sự kiện của một user giữ đúng thứ tự), nhưng Kafka KHÔNG đảm bảo thứ tự giữa các partition. Rồi so throughput 1 partition (580k/giây) với 6 partition (1,22 triệu/giây) để thấy song song hoá thật sự, kèm cái bẫy phân bố lệch khi ít key.

Lập trình 22/09/2026 6 phút

Consumer group và rebalance: cách Kafka chia việc cho nhiều worker, và vì sao consumer thứ tư ngồi không

Partition cho Kafka khả năng song song; consumer group là cách bạn khai thác nó. Bài này đo thật trong lab: một group với 1 consumer ôm cả 3 partition, thêm consumer thứ hai thì Kafka chia lại 2+1, thứ ba thì mỗi consumer đúng một partition, và consumer thứ tư ngồi không vì chỉ có 3 partition. Hiểu rebalance để co giãn số worker theo tải — và biết cái giá stop-the-world của nó.

Lập trình 22/09/2026 6 phút

Delivery semantics trong Kafka: at-most-once, at-least-once, exactly-once — và vì sao acks=0 lại chậm hơn

Message của bạn có thể bị mất, bị trùng, hoặc được ghi đúng một lần — ba kịch bản này do acks và idempotence quyết định. Bài này giải thích cơ chế từng mức rồi đo thật throughput theo acks trên lab, kèm hai phát hiện trung thực: trên single-node acks=all gần như acks=1 về độ bền, và acks=0 (gửi rồi quên) lại CHẬM hơn acks=1 — ngược hẳn trực giác. Idempotent producer thì gần như miễn phí.

Lập trình 22/09/2026 6 phút

Offset trong Kafka: cái bookmark quyết định mất hay trùng dữ liệu, và cách tua lại log

Consumer nhớ đã đọc tới đâu bằng committed offset — và chính chỗ bạn đặt lệnh commit quyết định hệ thống mất dữ liệu hay xử lý trùng khi crash. Bài này đo thật: đọc 100 message rồi xem CURRENT-OFFSET/LOG-END-OFFSET/LAG, rồi tua lại log bằng reset-offsets (về đầu đọc lại 100, tới offset 50 đọc 50, lùi 20 đọc 20). Và vì sao auto-commit tiện nhưng âm thầm làm mất message.