首页 > 解决方案 > 如何强制 Alpakka-kafka 从主题分区中读取循环?

问题描述

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

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

标签: apache-kafkaakka-streamalpakka

解决方案


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

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

  2. 您还可以使用以下 API 将分区列表分配给消费者

公共无效分配(java.util.Collection 分区)

这将手动分配给消费者的分区列表,因此消费者将只使用分配的分区。这不会使用消费者重新平衡。


推荐阅读