【问题标题】:Kafka consumption rate is low as compare to message publish on topic与主题上的消息发布相比,Kafka 消耗率较低
【发布时间】:2021-10-20 05:47:01
【问题描述】:

您好,我是Spring Boot @kafkaListener 的新手。服务 A 持续在kafka topic 上发布消息。我的服务使用来自topic 的消息。两个服务(服务 A 和我的服务)中 topic 的分区相同,但与发布消息相比,使用消息的速率较低。我可以在kafka 中看到消费者lag

我怎样才能填补这个滞后?或者如何提高消息的消费率?

  1. 我可以有单独的线程来处理消息吗?我可以在队列中消费一条消息(加入队列后确认),另一个线程将从该队列中读取以处理该消息。

  2. Spring是否提供了任何设置或属性来提高消耗率?

【问题讨论】:

  • Consumer lag 是消费者在主题分区中的当前偏移量减去分区总大小。

标签: spring-boot apache-kafka spring-kafka


【解决方案1】:

延迟是您想要减少的东西,而不是“填充”。

你能吃得更快吗?是的。例如,更改消费者max.poll.records 可以根据您的 I/O 速率(进行自己的基准测试)从默认值 500 增加,以便一次从 Kafka 获取更多数据。但是,这会增加消费者错误处理的表面积。

您还可以使用并立即确认偏移量,然后将记录扔到队列中进行处理。但是,在这种情况下可能会跳过记录,因为您将处理移出偏移跟踪的关键路径。
或者您只能在每个消费者轮询循环中提交一次,而不是确认每条记录,但这可能会导致重复记录处理。

作为mentioned before,添加分区是分配生产者工作负载后扩展消耗的最佳方式

【讨论】:

  • 如果单个线程跟不上生产速度,您通常需要增加分区数(以及侦听器容器中的并发)。不建议将记录传递给其他线程;它使偏移跟踪变得更加困难。
  • @GaryRussell 我同意,但是 KafkaConsumer Javadoc 中提到了该策略
【解决方案2】:

如果单个消费者线程无法跟上生产速度,您通常需要增加分区数量(以及侦听器容器中的并发)。

如果这没有帮助,您将需要分析您的消费者应用程序以查看瓶颈在哪里。

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2016-01-17
    • 2023-03-17
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多