Kafka是大型架构核心,下面我详解KafkaKafka如何解决百万消息堆积@mikechen
Kafka百万消息堆积
Kafka 消息堆积本质上是:生产速度 > 消费速度。

例如:
- Producer:10万条/秒;
- Consumer:5万条/秒;
- 每秒增加5万条积压;
10分钟就会堆积:3000万条消息。
所以第一步不是盲目扩容,而是定位消费端瓶颈。
用官方工具查看 Lag:
bin/kafka-consumer-groups.sh --bootstrap-server <broker> --group <group-id> --describe
常见根因:
- 消费者处理逻辑慢(DB 同步写、远程调用阻塞、复杂计算);
- 生产突增(大促、批量导入);
- 分区数不足 / 热点分区(key 分布不均);
- 消费者数量 < 分区数
- 频繁 Rebalance(心跳超时、max.poll.interval.ms 设置不当)
如何解决百万消息堆积?
首先,Kafka 通过分区机制提升并行处理能力。

单个 Topic 可以拆分为多个 Partition,每个分区都能独立写入和读取。
这样一来,积压消息不再只能由单一线程或单一节点处理,而是可以由多个消费者并行消费。
只要合理增加分区数,并配合消费者组扩容,就能显著提高整体消费吞吐,从而加快积压消息的消化速度。
再次,消费端的优化非常关键。

解决堆积不能只靠 Kafka 本身,更要提升消费者的处理能力。
例如,可以增加消费者实例数量,但前提是分区数足够支撑并行度;
也可以优化业务逻辑,减少单条消息处理耗时;
对于耗时任务,可以采用批量消费、异步处理、线程池解耦等方式,提高单位时间内的消费量。