Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 对消费者的分区分配_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

Apache kafka 对消费者的分区分配

Apache kafka 对消费者的分区分配,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,有没有办法迫使卡夫卡始终是一个满足于单个分区的消费者。 即使消费者崩溃,导致重新平衡,我们也必须以某种方式确保消费者不能满足多个分区的需求。 这是为了防止我们的业务聚合和容错逻辑中的复杂性——试图满足动态/不可预测数量的分区。我认为您无法使用订阅方式在消费群体中进行自动再平衡。我看到了不同的问题。 如果您有一个包含X个分区的主题,那么您需要在相同的使用者组中包含X个使用者,以便让每个使用者都获得一个分区。在启动期间,当其他使用者启动时,其中一个使用者可能会获得多个分区。当一个或多个消费者崩溃时,

有没有办法迫使卡夫卡始终是一个满足于单个分区的消费者。
即使消费者崩溃,导致重新平衡,我们也必须以某种方式确保消费者不能满足多个分区的需求。

这是为了防止我们的业务聚合和容错逻辑中的复杂性——试图满足动态/不可预测数量的分区。

我认为您无法使用订阅方式在消费群体中进行自动再平衡。我看到了不同的问题。 如果您有一个包含X个分区的主题,那么您需要在相同的使用者组中包含X个使用者,以便让每个使用者都获得一个分区。在启动期间,当其他使用者启动时,其中一个使用者可能会获得多个分区。当一个或多个消费者崩溃时,还活着的消费者中的一个会得到更多的分区,而死去的消费者会恢复。 你不能保证每一刻都有一个消费者——一个分区。 因此,唯一的方法是使用assign而不是subscription()。
请注意,通过这种方式,您必须指定分区,并且您没有现成的自动重新平衡功能。

您可以考虑实现自定义并为您的消费者使用它-这允许您在仍然使用组管理功能的情况下显式控制分区分配

通过重写,您应该能够将此使用者从中读取的当前分区(或在其配置中显式配置一个并转发该分区)传播给决定在重新平衡过程中谁必须从哪个分区读取的组长。 在重新平衡中,您可以确保按原样分配分区

话虽如此,我不确定我是否会推荐这种方法,如果你需要如此深入地参与内部事务,你可能没有正确地使用卡夫卡。也许需要一点时间来重新考虑您的方法:)


卡夫卡在最新版本中还拥有合作粘滞转让人,这大大削弱了再平衡,看一看,这也可能有助于减轻您的痛苦。

我以为一个分区已经被最多一个消费者使用了,不是吗?问题是强制一个消费者始终使用一个分区,我认为阅读此内容将有所帮助,抱歉误解