V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lucashuang0722
V2EX  ›  Kafka

Kafka 消息处理冲突问题

  •  
  •   lucashuang0722 · 3 天前 · 266 次点击

    背景

    我目前有一个 Kafka 集群,包含两个 Kafka 服务器,它们共享同一个 Zookeeper 。集群中有两个主题:corpnet-requests 和 corpnet-responses ,这两个主题都有 3 个 partition 。

    系统中有四个客户端:

    Client AClient B:订阅两个 Kafka 服务器上的 corpnet-requests 和 corpnet-responses 主题。这两个客户端负责生产包含 guid 、url 、payload 和 auth 的消息到 corpnet-requests 主题。

    Client CClient D:同样订阅两个 Kafka 服务器上的 corpnet-requests 和 corpnet-responses 主题。这两个客户端负责消费 corpnet-requests 主题中的消息,执行实际的 HTTP 请求,并将响应结果生产到 corpnet-responses 主题中。

    Client AClient B:除了生产请求消息外,还需要消费 corpnet-responses 主题中的消息,以获取实际的 HTTP 响应,完成一次请求的逻辑。

    以上设计主要用于解决 Client A 和 B 无法访问公司内网资源的问题,公司内网无法通过 vpn 访问。

    问题描述

    由于 corpnet-requests 和 corpnet-responses 主题都有多个分区,我担心会出现以下冲突情况:

    Client A生产的请求消息的响应(由Client CClient D生成)可能会被Client B消费,反之亦然。

    我的疑问

    请教各位大佬如何确保每个请求的响应能够准确地返回给发起请求的客户端(即Client A的请求响应不会被Client B消费,反之亦然)。似乎通过 key 来限制 partition 或者规划消费者组都无法保证,当然也有可能是我学艺不精理解有误。。

    欢迎大家提供解决方案或建议,谢谢!

    1 条回复    2024-06-25 22:05:49 +08:00
    q727729853
        1
    q727729853  
       3 天前
    直接指定分区不就得了?
    主题下有两个分区,A 发 1 ,B 发 2 。CD 发送,AB 接收也是同理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2384 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:19 · PVG 18:19 · LAX 03:19 · JFK 06:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.