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



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

在处理消费者速度较慢的情况下,最佳做法是什么?如何实现更多的并行性?

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

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

如何使用 Kafka 实现这一点,因为组中消费者的总和最多是分区数?我应该:

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

这种情况的最佳做法是什么?

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

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

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

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

我不确定在这种情况下通过 MQ 队列路由消息将如何真正提供帮助。如果读取速度仍然慢于写入速度,则队列中的数据量将增长,直到没有剩余磁盘空间为止。

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

最新更新