【问题标题】:How to improve Kafka consumer performance如何提高Kafka消费者的性能
【发布时间】:2023-02-20 18:12:50
【问题描述】:

我有一个消费者应用程序,我想加快速度。大部分时间消费者都在等待来自第三方系统的 http 响应,因此我无法继续处理队列中的其他消息并且延迟增加。在这种情况下,提高性能的推荐方法是什么。我的想法:

  1. 在不同的线程上创建多个消费者
  2. 消费一批消息,运行 Parallel.ForEach 处理它们然后提交。但是,如果批处理中的一条消息在处理过程中失败了怎么办?

【问题讨论】:

  • 您目前使用多少消费者?您的主题设置了多少个分区?你可以增加消费者的数量,是的。但是,如果您在上游遇到性能问题,您也需要在那里解决。在提高消费者性能方面,这取决于您关注的衡量指标是吞吐量还是延迟?
  • 不同实例上的 16 个分区和 2 个消费者。我看到我的实例资源没有得到充分利用,因为我只是在等待 http 响应。我专注于更高的吞吐量。

标签: .net apache-kafka confluent-kafka-dotnet


【解决方案1】:

分区数量越多,吞吐量就越大(尽管存在一些缺点,例如不可用性增加,并且一些提供商限制每个代理和集群的分区数量)。

你提到你有 16 个分区,我假设你是根据目标吞吐量计算的。

为了优化您的消费者吞吐量,您可以增加fetch.min.bytes。请参阅 Confluent 指南 here.

这将增加消费者为每个获取请求获取的数据。此配置设置分钟每个响应的预期字节数,并减少对领导者的提取请求数。领导者不会发送消费者消息,直到满足或等待时间超过fetch.max.wait.ms

您还应该使用具有多个消费者的消费者组(我不确定之前您是否意味着 2 个消费者组具有多个消费者,但如果不是,您可以增加它以便分区均匀分布)。

希望这可以帮助。

【讨论】:

    【解决方案2】:

    由于您使用的是 .NET,您可能想看看 KafkaFlow (https://github.com/farfetch/kafkaflow)。 KafkaFlow 允许您构建具有消息顺序保证的多线程消费者,因此它是您正在寻找的一个很好的工具。

    【讨论】:

      猜你喜欢
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2016-09-01
      • 2017-07-10
      • 1970-01-01
      • 2015-09-06
      相关资源
      最近更新 更多