【问题标题】:Kafka consumers reading too slowKafka 消费者阅读速度太慢
【发布时间】:2018-11-10 21:08:09
【问题描述】:

我们有大约 40 个主题的 Kafka 实现,每个主题有 40 个分区和 3 个复制。我们在 Kafka 设置中有 7 个代理和 40 个消费者。所有节点(对于代理和消费者)都具有合理的配置、托管和 AWS,我们几乎看不到任何机器出现任何峰值。但不知何故,我们发现消费者滞后非常高,尽管增加了 40 个消费者来满足上述设置的阅读需求。尽管我们每秒只有大约 215 条消息(每条消息的大小约为 2KB),但对于上述主题。已尽一切可能,但我们无法解决延迟问题。

我们还看到消费者大部分时间都处于空闲状态,偶尔会消费消息。 40 个消费者是否足以处理上述场景(40 个主题和 40 个分区,每个主题每秒有大约 215 条消息 (430 K) 摄取?请帮助。

【问题讨论】:

  • 所以你的意思是每个消费者从 40 个不同主题的 1 个分区中消费,(总共 1 个消费者 = 40 个分区,对于 1 个消费者来说是巨大的)
  • 尝试为消费者使用消费者组,并保持消费者数量等于该主题上的分区数量。我会将一组主题的消费者分成不同的组。前任。 40 个消费者专门听 10 个主题,4 个这样的组(总共运行 160 个消费者)。这需要反复试验才能找出最适合您的 SLA 的组合。
  • @Deadpool,感谢您的评论。我想,你在这个场景中。是的,每个消费者都在阅读 40 个不同主题的 1 个分区,我同意这可能是巨大的。那个时候也是这样,我以为消费者应该是一直在看,但是我看到消费者是闲着很长时间,偶尔消费,很混乱。
  • @segFaulter,感谢您的评论。每个消费者实例使用大约 1 GB 的 RAM 来运行,因此添加 160 个消费者将在设置环境方面产生大量成本。
  • 消费者一次可以从一个分区进行轮询,(因此假设每次轮询需要 1 秒,因此它应该从 1 轮询到 40 次,因此完成分配给它的所有分区的 40 次轮询需要 40 秒) ,当没有足够的数据在分区中轮询时,消费者可以坐在理想的位置,导致这种情况的消费者因素有很多

标签: apache-kafka kafka-consumer-api


【解决方案1】:

尚不清楚您指定的组 ID 或分配给哪个消费者的主题。

假设所有消费者都在读取所有主题(您订阅了模式 .*),那么您将错过 1560 个可以拥有专用消费者实例的分区(集群中的总分区为 40*40 - 现有 40 个“活跃的”消费者线程)。

由于消费者一次只能读取一个分区,而不是一次给定主题的所有分区,在我看来,您需要添加更多消费者,最好分布在多个应用程序实例/机器上。

【讨论】:

  • 感谢您的回答。所有消费者都使用相同的组 ID。可能是,我理解您的建议,即使用 1600 个消费者让每个消费者从一个特定的分区中读取。不过,这会增加很多成本。此外,我无法理解的是为什么每个消费者在读取之间等待很长时间。如果消费者在没有空闲的情况下运行,他们将能够赶上速度,因为我们每秒只有大约 215 条消息被插入到所有主题中(总共大约每秒 450 KB 的数据)。
  • 我不确定你是如何衡量空闲的,但并不是每个消费者都需要在一台机器上完成
  • 感谢您的回复。我让消费者​​分布在 10 个不同的节点上,每个节点运行 4 个消费者。消费者使用 pm2 运行,消费者应用程序在消费消息时写入日志。这就是我能够确定消费者何时处于空闲状态的方法。
  • 每台机器 4 个消费者是一个极低的数字......线程很便宜......我肯定会建议提高它
  • 每秒也只有 215 条消息和 40 个分区!!您可能还想减少分区数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2017-12-02
相关资源
最近更新 更多