第 18 / 19 篇

附录 C 综合练习与参考答案

1. 四个分区,同一组有六个消费者,会有多少消费者同时负责分区? 最多四个,具体取决于订阅和分配;其余成员可以空闲。

2. 同一主题有三个业务组,是否要把主题复制三份? 不需要。各组读取同一份保留数据,维护各自进度;读取压力仍需要容量规划。

3. 已处理 offset 9,应该提交多少? 若此前该分区的记录均已成功处理,通常提交 10,表示下一条的位置。

4. 重启旧组时加 --from-beginning,为什么没从头读取? 组有有效已提交进度,该参数不会覆盖它。可用新练习组验证历史,或停止原组后有计划地重置。

5. acks=all 是否意味着至少有三个副本? 不是。它等待当前 ISR,副本数量由主题等配置决定,还需要 min.insync.replicas 等配合。

6. 两条同一 Key 的消息是否一定按业务发生时间处理? 不能无条件保证。还要考虑上游并发、分区映射变化、消费者并发以及业务版本。

7. 业务数据库更新成功,提交进度前宕机,怎么处理? 允许再次读到,通过数据库事务中的去重凭证避免重复更新,再提交进度。

8. 保留七天,消费者停了十天,还能从原位置读完吗? 不能保证,旧数据可能已经清理。需要定义恢复点、备份或重新构建方案。

9. Kafka 事务能自动保证支付接口只扣一次吗? 不能。支付系统需要幂等键、结果查询或相应的业务协调机制。

10. Lag 增长就一定应该增加分区吗? 不一定。先排查输入增长、下游变慢、热点 Key、异常重试和再均衡,扩分区还会影响映射与顺序。