当Kafka消息存在积压情况时,主要的解决方案有:
1.增加分区
为Topic添加更多的分区,可以横向扩展吞吐量。达到分流的效果。
举例
./bin/kafka-topics.sh --zookeeper localhost:2181--alter --topic topic1 --partitions 20
2.增加复制因子
增加Topic的复制因子,为每一个分区提供更多的Leader,从而增加整体的消费能力。
举例
./bin/kafka-topics.sh --zookeeper localhost:2181--alter --topic topic1 --replication-factor 3
3.增加消费者数量
在同一个消费组中增加更多的消费者实例,可以平摊分区的负载,增加整体的消费能力。
4.优化消费者配置
如增加fetch消息量、增加批次大小等能有效地提高消费者的吞吐量。
5.限速生产者
限制生产者发送给单个分区的消息大小和发送速率,避免超过消费能力。
6.启用消费组再平衡
让Kafka自动重分配分区,分配给更多的消费者实例。
7.临时增加Broker
在消息积压期间临时增加Broker数量,接管部分负载,等消息消化完毕后再下线。
Kafka消息积压的主要解决方案包括:
- 增加分区数量
- 增加复制因子
- 增加消费者数量
- 优化消费者配置
- 限制生产者速率
- 启用消费组再平衡
- 临时增加Broker
这些方案需要综合运用,从增加 Broker/Partition数量、优化生产消费配置、限速生产者等角度切入,才能高效降低消息积压。
主要通过增加分区、增加副本、优化消费端、限速生产端等手段来逐渐降低消息积压。