【问题标题】:what is the best approach to listen and process messages concurrently in kafka?在 kafka 中同时收听和处理消息的最佳方法是什么?
【发布时间】:2021-07-15 21:57:12
【问题描述】:

我正在开发一个 Kafka 应用程序来处理来自topic-request-A 的请求并调用微服务并将响应发布到topic-response-A

我有 100 个微服务要调用,所以我有 100 个主题用于请求 (topic-request-A1,topic-request-A2 .... topic-request-A100) 和 100 个主题供回复 (topic-response-A1,topic-response-A2 .... topic-response-A100)

我正在使用spring @KafkaListener注解来监听100个请求主题,这种方式是作为顺序处理而不是并行处理。

如何并行监听请求?

【问题讨论】:

  • 欢迎来到 StackOverflow :) 每个微服务不直接订阅 topic-request-A 是否有原因?并直接生产回topic-response-A?然后每个微服务可以并行消费和生产。
  • 这是不可能的,因为每个主题都有单独的 avro 架构。

标签: java spring-boot apache-kafka spring-kafka confluent-platform


【解决方案1】:

你需要增加每个topic上的partition数量,然后在@KafkaListener上设置并发;分区数必须大于或等于并发数。

【讨论】:

  • 谢谢 Gary,如果我有 100 个主题,你建议我在生产环境中有多少个分区?
  • 这取决于您希望在每个主题上实现的任何并发性。分区必须 >= 并发;过度配置分区通常会更好,这样您以后可以轻松增加并发性。
  • 谢谢加里。如果我有 5 种不同的方法来监听 5 个不同的主题,并发度为 3,分区大小为 3,我可以实现 5*3 倍的性能提升。不是吗?
  • 理论上是的;实际上比这要少 - 这取决于您的应用程序对记录的处理、CPU 可用性、I/O 带宽等。
  • 很好,Gary,我想设置监听器,像这样 public void listen(List> payloads, Acknowledgment acknowledgment) {} 我收到以下错误 A 'RetryTemplate'不支持批处理侦听器;考虑使用适当配置的“SeekToCurrentBatchErrorHandler”来配置容器,你能帮我解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2020-08-07
  • 1970-01-01
相关资源
最近更新 更多