Kafka - 消费者处理缓慢的最佳实践。如何实现更多的并行性?

eth*_*b_0 6 apache-kafka kafka-consumer-api

我知道消费者组中活跃消费者的最大数量是主题的分区数量。

如果消费者处理速度慢,最佳实践是什么?如何实现更多的并行性?

示例:一个主题有 6 个分区,生产者每秒生成数千条消息。所以我组里最多有6个消费者。考虑到处理这些消息很复杂,而且消费者比生产者慢得多。结果是消费者总是落后于最后的偏移量,并且滞后性正在增加。

在传统的 MQ 系统中,我们只需添加越来越多的消费者即可保持最新状态。

由于组中消费者的总数最多是分区的数量,如何使用 Kafka 实现这一点?我是不是该:

  • 将主题配置为具有更多分区,以允许每个组有更多消费者?
  • 将消息从消费者路由到传统的 MQ 队列(但丢失顺序)?

对于这种情况,最佳做法是什么?

Mic*_*son 6

在Kafka中,分区是并行的单位。

在不知道我们确切的用例和要求的情况下,很难提出准确的建议,但有一些选择。

首先,您应该真正考虑拥有更多分区。6 个分区相对较小,您可以轻松拥有 60、120 甚至更多分区(以及相应的消费者数量)。突然之间,每个消费者要做的工作量显着减少。

此外,如果您的要求允许,您还可以快速消费并将记录处理分散到许多工作人员中。在这样的解决方案中,维持顺序比较困难,但如果您不需要它,那么您可以考虑它。

我不确定通过 MQ 队列路由消息在这种情况下是否真正有帮助。如果您的读取速度仍然比写入速度慢,队列中的数据量将会增加,直到没有剩余磁盘空间。

Kafka 更好地设计为充当生产者和消费者之间的缓冲区,因此只需确保主题有保留限制,从而允许消费者方面具有一定的灵活性,而不会丢失数据。