【问题标题】:Spring Kafka and poll strategy on multiple partitions多个分区上的 Spring Kafka 和轮询策略
【发布时间】:2020-04-30 23:01:28
【问题描述】:

假设我有一个有 4 个分区的主题。 我正在使用 @KafkaListener 注释使用 spring kafka 微服务来使用记录。 这个微服务是 dockerized,我有它的两个实例。然后将每个实例插入两个分区。

我观察到当我有滞后要赶上时,实例停留在它所在的分区上,并让第二个分区累积滞后。只有当我们停止生成消息并且第一个分区上的延迟被完全消耗时,它才会切换到第二个分区。

我的应用程序中的消费顺序只是部分重要。我的意思是我可以以不同的顺序处理它们,但我不能让消息在分区中停留太久。

简单的解决方案就是拥有四个 docker 实例,一切都会好起来的。

spring-kafka 中是否有一些属性可以让我们在 KafkaListener 插入多个分区时更改轮询策略。这个想法是它会循环轮询每个分区上的轮询分配给每次轮询

感谢阅读!

【问题讨论】:

  • 滞后在哪里?在 kafka 内还是您的意思是 lag=msg 处理时间?
  • 不确定我是否理解您的问题。对于我的消费者来说,滞后是卡夫卡,因为我消费的速度不够快。但这是我可以接受的。

标签: apache-kafka spring-kafka


【解决方案1】:

您可以将每个实例上的使用者(侦听器容器)concurrency 设置为 2;这样,您将在 2 个实例中拥有 4 个消费者。

使用弹簧靴,这是spring.kafka.consumer.concurrency。如果您要创建自己的工厂,请直接设置属性。

【讨论】:

  • 感谢您的意见!我希望我们可以做些别的事情并避免在 jvm 中添加一层并发,因为我们已经有了一个带有 docker 但我想它不存在。再次感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多