动态增加或减少Kafka分区

Mak*_*Mak 0 apache-kafka kafka-consumer-api

我有一个负载不是恒定的系统。我们每天可能会收到 1000 个请求,或者根本没有请求。

我们使用 Kafka 在服务之间传递请求。我们保留了 Kafka 消费者的平均数量以减少产生的成本。现在,如果当天没有收到请求,我的 Kafka 消费者将处于理想状态,如果收到太多请求,则会出现延迟。

我们希望将这些消费者保持在自动缩放模式,这样,如果请求数量激增,我的服务器(Kafka 消费者)数量将会增加。一旦请求数量减少,我们将删除服务器。因此,Kafka分区必须相应增加或减少

  1. Kafka允许增加分区。这种情况下,如何动态减少Kafka分区呢?
  2. 还有其他解决方案来处理这种自动缩放吗?

cri*_*007 5

扩展分区并不能在短期内解决滞后问题,因为执行此操作时不会在分区之间移动任何数据,因此现有(或新)消费者仍然只能读取先前分区中的数据。

不可能减少分区,也不可能将消费者扩展到超出分区数量。

如果您能够牺牲处理顺序来提高消费速度,则可以将消费线程和工作线程分开,如 KafkaConsumer javadoc 中所暗示的那样,那么您将能够扩展这些工作线程。
既然您正在考虑修改分区计数,那么我猜处理顺序不是问题。

有一个或多个消费者线程来执行所有数据消费,并将 ConsumerRecords 实例移交给实际处理记录处理的处理器线程池所消费的阻塞队列。