消费分布不均匀的多个kafka分区

问题描述 投票:0回答:2

我在 Kafka 文档的任何地方都找不到消费者如何使用来自多个分区的数据,尤其是它如何决定从哪个分区中选择下一个分区以及此轮询是否保证每个分区的“公平性”。

在文档的哪个位置我可以找到对观察到的(以及我的用例所需的)行为的确认,其中所有分区都被均匀且公平地消耗,而不管延迟如何?

这里是例子:

  • 1个主题,有10个分区,
  • 1 消费者(比方说 rdkafka 生锈)消费所有分区 (手动或自动分配)。
  • 第一个分区比其他 9 个分区多 1000 倍的消息。其他 9 个分区均匀分布。

当消费者比生产者快时,即。消费者主题的总滞后为 0,没有问题和公平性问题。

但是,当消费者的处理速度不如生产者的生产速度时,卡夫卡就会有,例如,第一个分区中有 1000000000 条消息,其他 9 个分区中有 1000000 条消息。

现在,假设消费者每分钟处理 10000 条消息,每批接收 100 条消息。消费者将观察到每个分区的消费消息率是多少?是否可以保证消费者“平均”会为每个分区观察到 1000 条消息/分钟?延迟较大的分区是否有优先级?对于滞后较小的分区是否有取消优先级?根据我的经验,我可以看到较小的分区不会受到较大分区的影响,但我无法在 Kafka 文档中找到这种行为的保证。你能告诉我它在哪里记录吗?

apache-kafka kafka-consumer-api
2个回答
0
投票

每次投票,消费者将从每个分区中获得尽可能多的信息。

“我们以循环方式从每个分区中拉取尽可能多的记录。在同一个示例中,我们将首先尝试从 A 中拉取所有记录。如果仍有可用空间,我们将拉取剩余的任何内容B 等等。我们会跟踪我们离开的分区,以便下一次迭代将从那里开始“

stackoverflow.com/questions/tagged/apache-kafka

在您理想设置的示例中,最大的分区应该有滞后,而其他分区都被消耗了。

这里有一个类似的问题 Kafka分区是否被均匀消费?


-1
投票

没有开箱即用的方法来处理消费者方面的这种优先级排序。

是否可以保证“平均”消费者会观察到 1000 条消息

这完全取决于每条消息的消费者处理时间。

对于延迟较大的分区是否有优先级?

不,没有直接的方法可以使用消费者配置来做到这一点,但是有一些替代方法可以帮助减轻这种巨大的滞后,其中几个选择是:

1。多主题方法: 按主题拆分消息的优先级,例如您的具有高滞后的分区,可以拆分为另一个主题,这将使您可以控制更多的并行性,最终有助于控制吞吐量。

2。 Bucket Priority 方法::把你的topic partitions 分成逻辑regions,比如10partitions topic,可以分成logical regions 从[p0-p5] 专用于高优先级消息,从[p6-p8] 服务中等优先级等等,要控制这样的分区,你需要在生产者端实现一个自定义分区器,它可以达到你想象的那么远,如果你有 KeyMessaged 逻辑,你可以用桶装饰它-优先方法。

这里是 一篇关于 confluent 的 Bucket 优先级模式的文章

© www.soinside.com 2019 - 2024. All rights reserved.