Khoá học ngắn về Kafka
Kafka: partition và consumer group
Kafka chỉ bảo đảm thứ tự bên trong một partition, và chỉ cho mỗi partition đúng một consumer trong group. Hai câu đó nghe đơn giản, nhưng chúng quyết định hai thứ người dùng Kafka hay gặp mà khó giải thích: vì sao thêm partition lại làm hỏng thứ tự của một khoá, và vì sao thêm consumer đôi khi không làm gì cả. Khoá này tính ra câu trả lời bằng đúng thuật toán Kafka dùng, rồi đối chiếu với số đo trên Apache Kafka 4.3.1.
Lộ trình
Mỗi bài khoảng 12–15 phút đọc, kèm phòng thí nghiệm chạy ngay trên trình duyệt.
Khoá nào rơi vào partition nào
Công thức murmur2 của producer, đối chiếu 256 cặp khoá–partition. Kèm lab tự gõ khoá và xem cái giá của việc nâng số partition.
Bài 2Ai đọc partition nào
Bốn chiến lược gán partition, đo trên group thật. Kèm lab tự đặt topic, số partition và số consumer.
Cách đo
Bộ đo là một broker Kafka duy nhất chạy ở chế độ KRaft trong Docker, cộng với các script shell
chép vào container rồi chạy bằng docker exec. Không có thư viện client nào ở
giữa: mọi thứ đi qua đúng những công cụ đi kèm Kafka.
docker run -d --name kflab -e KAFKA_NODE_ID=1 … apache/kafka:latest
docker cp do-partition.sh kflab:/tmp/
docker exec kflab sh /tmp/do-partition.sh
Ánh xạ khoá → partition đọc bằng kafka-console-consumer.sh với
--property print.partition=true; việc gán partition cho consumer đọc bằng
kafka-consumer-groups.sh --describe --members --verbose. Cả hai engine
JavaScript trong khoá đều được đối chiếu lại với chính những số liệu đó trước khi đưa vào bài.
range là c1, c2,
c3; lần chạy lại với đúng bộ tên đó nhưng thứ tự vào group ngược lại thì nhóm ấy đổi. Nghĩa là
kích thước của phần chia thì dự đoán được, còn consumer nào nhận phần nào thì
không suy ra được từ tên. Bài 2 nói rõ chỗ này thay vì che đi.