消费者

消费者是 Kafka 消息的出口,理解 Consumer Group、Offset 管理和 Rebalance 机制是掌握 Kafka 的关键。

Consumer Group

什么是 Consumer Group

Consumer Group 是 Kafka 的核心消费模型:

                    Topic: orders (3 partitions)
                    ┌───────────────────────────┐
                    │ P0      P1      P2        │
                    └───┬───────┬───────┬───────┘
                        │       │       │
        ┌───────────────┼───────┼───────┼───────────────┐
        │               │       │       │               │
        │  Consumer Group A     │       │               │
        │  ┌─────────┐  │  ┌────┴────┐  │  ┌─────────┐ │
        │  │Consumer │◀─┘  │Consumer │◀─┘  │Consumer │◀┘
        │  │   1     │     │   2     │     │   3     │  │
        │  └─────────┘     └─────────┘     └─────────┘  │
        │                                               │
        └───────────────────────────────────────────────┘

        ┌───────────────────────────────────────────────┐
        │  Consumer Group B                             │
        │  ┌─────────────────────────────────────────┐ │
        │  │         Consumer 1                       │ │
        │  │         (消费所有 3 个分区)              │ │
        │  └─────────────────────────────────────────┘ │
        └───────────────────────────────────────────────┘

Consumer Group 特性

消费模型对比

模型
实现方式
适用场景

队列模式

所有 Consumer 同一 Group

任务分发、负载均衡

发布订阅

每个 Consumer 不同 Group

广播、多系统消费

分区分配策略

Range 策略

RoundRobin 策略

Sticky 策略(推荐)

CooperativeSticky 策略

Offset 管理

Offset 概念

自动提交 vs 手动提交

手动提交方式

提交策略选择

策略
优点
缺点
适用场景

自动提交

简单

可能丢消息或重复消费

容忍少量重复

同步提交

可靠

阻塞,性能差

强一致性要求

异步提交

非阻塞

可能失败

高吞吐场景

批量+异步

平衡

复杂

大多数场景

Rebalance 机制

什么是 Rebalance

Rebalance 是 Consumer Group 重新分配 Partition 的过程:

Rebalance 流程

Rebalance 的影响

避免不必要的 Rebalance

消费语义

三种语义

Exactly Once 实现

完整代码示例

面试高频问题

1. Consumer Group 如何实现负载均衡?

2. Rebalance 过程中会发生什么?

3. 如何避免重复消费?

4. auto.offset.reset 的作用?

5. max.poll.records 和 max.poll.interval.ms 的关系?

总结

Last updated