我目前有一个 Kafka 集群,包含两个 Kafka 服务器,它们共享同一个 Zookeeper 。集群中有两个主题:corpnet-requests 和 corpnet-responses ,这两个主题都有 3 个 partition 。
系统中有四个客户端:
Client A 和 Client B:订阅两个 Kafka 服务器上的 corpnet-requests 和 corpnet-responses 主题。这两个客户端负责生产包含 guid 、url 、payload 和 auth 的消息到 corpnet-requests 主题。
Client C 和 Client D:同样订阅两个 Kafka 服务器上的 corpnet-requests 和 corpnet-responses 主题。这两个客户端负责消费 corpnet-requests 主题中的消息,执行实际的 HTTP 请求,并将响应结果生产到 corpnet-responses 主题中。
Client A 和 Client B:除了生产请求消息外,还需要消费 corpnet-responses 主题中的消息,以获取实际的 HTTP 响应,完成一次请求的逻辑。
以上设计主要用于解决 Client A 和 B 无法访问公司内网资源的问题,公司内网无法通过 vpn 访问。
由于 corpnet-requests 和 corpnet-responses 主题都有多个分区,我担心会出现以下冲突情况:
Client A生产的请求消息的响应(由Client C 或 Client D生成)可能会被Client B消费,反之亦然。
请教各位大佬如何确保每个请求的响应能够准确地返回给发起请求的客户端(即Client A的请求响应不会被Client B消费,反之亦然)。似乎通过 key 来限制 partition 或者规划消费者组都无法保证,当然也有可能是我学艺不精理解有误。。
欢迎大家提供解决方案或建议,谢谢!
1
q727729853 148 天前
直接指定分区不就得了?
主题下有两个分区,A 发 1 ,B 发 2 。CD 发送,AB 接收也是同理 |