Skip to content

动手实验

English · 中文版

先在仓库根目录安装一次:

uv sync

两个实验都使用临时目录和公开 Direct API,不会留下代理数据。

1. acks=1 下的领导者故障

uv run python -m minikafka.labs.leader_failure

预期关键输出:

acknowledged offset: 0
consumer-visible end (HW): 0
records after failover: 0

重点区分“生产者已收到确认”和“数据已提交可见”。领导者接受了偏移量 0,但 跟随者尚未拉取;提升该跟随者后,未复制尾部消失。这对应 Kafka acks=1 表达的 持久性风险,并不表示 MiniKafka 实现了 Kafka 的选举协议。

2. 消费组再均衡

uv run python -m minikafka.labs.rebalance

预期关键输出:

member 1: orders-0, orders-1, orders-2, orders-3
member 2: orders-1, orders-3
overlap after refresh: False

重点观察代次转换:第一个消费者最初拥有四个分区;第二个加入后,第一个消费者 仍保留旧的本地视图,直到调用 refresh_assignment()。刷新后的分配不再重叠。 第二个成员离开后,第一个重新拥有全部分区。MiniKafka 同步完成分配,没有 Kafka 式 revoke barrier。

继续查看可执行证据

这两个 lab 讲解关键权衡;完整机制由测试套件覆盖。可按 行为矩阵选择单项测试,或运行:

uv run pytest -q