Kafka 消费者组(Consumer Group)通过 Rebalance 将分区重新分配给组内成员,保证同一分区在同一时刻仅被一个消费者消费。
一、Rebalance 触发条件
- 组成员加入或离开
- 订阅主题的分区数变化
- 心跳超时(
session.timeout.ms)
二、位移提交语义
java
props.put("enable.auto.commit", "false");
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
process(records);
consumer.commitSync();
}- 至多一次(At-Most-Once):先提交位移后处理,故障时可能丢消息
- 至少一次(At-Least-Once):先处理后提交,故障时可能重复消费
- 精确一次(Exactly-Once):结合幂等生产者与事务实现
生产环境推荐手动提交并保证处理逻辑幂等。