1. 介绍

今天双11,公司kafka上部分消费者对应的分区上堵了不少数据。堵数据的问题主要是由于一开设计的时候,没有考虑足够周全。那时候由于担心分配太多分区导致影响延迟,从而在分配分区上比较“小气”。 针对分区数对kafka的影响可以参考我的另外一篇文章:选择合适的kafka分区数

本文主要针对kafka消息堆积时,提供一些解决方法和思路。

2. 延迟和消息堆积

增加分区数,比较担心的是较多分区数导致延迟增加。针对这个问题,其实我们主要应该搞明白我们性能的瓶颈到底在什么地方。绝大部分时候,以及绝大部分应用,性能瓶颈都是在生产者和消费者上。由于分区数增多导致分区复制延迟带来的性能影响往往不是瓶颈(可能复制延迟从几毫秒变化到几十毫秒)。这时候可以“爽快”的在设计之初就设置较多的分区数(考虑能够支撑近2年的生产和消费吞吐量的增速)。

3. 几点最佳实践建议

3.1 未雨绸缪

如果还没开始投入使用kafka,那应该在设计分区数的时候,尽量设置的多点(当然也不要太大,太大影响延迟,具体可以参考我前面提到的文章),从而提升生产和消费的并行度,避免消费太慢导致消费堆积。

3.2 增大批次

瓶颈在消费吞吐量的时候,增加批次也可以改善性能

3.3 增加线程数

如果一些消费者组中的消费者线程还是有1个消费者线程消费多个分区的情况,建议增加消费者线程。尽量1个消费者线程对应1个分区,从而发挥现有分区数下的最大并行度。