如何强制 Alpakka-kafka 从主题分区中读取循环?

How to force Alpakka-kafka to read round-robin from topic paritions?

我想就以下问题寻求一些意见 - 我在我的应用程序中使用 Consumer.committableSource。在测试期间,我发现应用程序不会在 Kafka 主题的分区之间进行循环,而是会排空给定分区,直到它消耗掉最新的条目,然后再切换到下一个分区。这对我的应用程序来说并不理想,因为它关心事件在 Kafka 上的时间顺序。这种读取分区的详尽方式就像时间来回。

关于如何调整消费者以支持分区消费循环的任何想法? 谢谢!

您可以通过两种方式使用此场景,第一种更可取,因为它可以以最小的延迟实现并行化和高吞吐量。

  1. 为同一个消费者创建多个实例。它将作为一个消费者组工作,所有实例将并行共享分区负载。 例如如果您有 4 个分区并使用 2 个实例,这意味着理想情况下 1 个实例将占用 2 个分区。现在,如果您将实例增加到 4,那么在这种情况下,理想情况下的每个实例都将使用 1 个分区。在这种情况下,分区重新平衡将由消费者的组管理来管理。

  2. 您还可以使用以下 API

    将分区列表分配给消费者

public void assign(java.util.Collection partitions)

这将手动为消费者分配分区列表,因此消费者将仅使用分配的分区。这不会使用消费者再平衡。