Apache kafka 为什么请求-响应流中涉及的组件不应该使用卡夫卡主题的消息?

Apache kafka 为什么请求-响应流中涉及的组件不应该使用卡夫卡主题的消息?,apache-kafka,architecture,microservices,Apache Kafka,Architecture,Microservices,作为我的客户端站点设计决策的一部分,http请求-响应流中涉及的组件(微服务)允许在卡夫卡主题上生成消息,但不允许使用来自卡夫卡主题的消息 此类组件(微服务)可以读取和写入数据库,可以与其他组件交谈,可以生成主题信息,但不能使用卡夫卡主题信息 相反,设计建议编写单独的实用程序,使用来自kafka主题的消息并存储在数据库中。请求-响应流中涉及的组件(微服务)将从数据库中读取该信息 如果这些组件(微服务)使用卡夫卡主题,那么设计缺陷是什么?为什么设计建议编写单独的实用程序来使用kafka主题并存储在

作为我的客户端站点设计决策的一部分,http请求-响应流中涉及的组件(微服务)允许在卡夫卡主题上生成消息,但不允许使用来自卡夫卡主题的消息

此类组件(微服务)可以读取和写入数据库,可以与其他组件交谈,可以生成主题信息,但不能使用卡夫卡主题信息

相反,设计建议编写单独的实用程序,使用来自kafka主题的消息并存储在数据库中。请求-响应流中涉及的组件(微服务)将从数据库中读取该信息


如果这些组件(微服务)使用卡夫卡主题,那么设计缺陷是什么?为什么设计建议编写单独的实用程序来使用kafka主题并存储在数据库中,以便组件可以从数据库中读取这些信息。

kafka主题被划分为多个分区,对于每个消费者组,分区分布在该组中的各个消费者之间。每个使用者负责使用分配的分区中的消息

据推测,您的请求处理机器是集群的,负载平衡的。有两种方法可以让这些机器订阅卡夫卡主题,但这两种方法都被破坏了:

  • 您可以将请求处理机器放在不同的消费者群体中。在这种情况下,每个人都必须使用所有消息。这可能不是您想要的,这通常是让每个消费者从队列中拉出,并且每个消息只处理一次。此外,消费者将失去同步,将以不同的速率处理消息
  • 您可以将请求处理机器放在相同的消费者组中。在这种情况下,每个人将只能访问分配给它的分区。每台机器将看到不同的消息流。当然,这也不是你想要的。客户端将获得不同的结果,这取决于负载平衡器将其定向到哪台机器

  • 如果您希望所有请求处理机器从整个主题的同一消息队列中提取,那么它们需要与分配了所有分区的单个使用者通信。

    为什么请求处理机器不能位于不同的使用者组中?啊。。。因为在我们的例子中,每个请求处理机器都有多个goroutine(GoLang线程接受http请求),所以请求处理机器是否可以安全地为kafka主题生成消息?@MattTimmermans是的,请求处理机器是集群的