Kafka是否支持请求响应消息传递

Does Kafka support request response messaging

我正在研究 Kafka 9 作为一个业余项目并完成了一些 "Hello World" 类型的例子。

我必须考虑一般基于请求响应消息传递的真实世界 Kafka 应用程序,更具体地说,如何将 Kafka 请求消息link 为其响应消息。

我一直在考虑使用生成的 UUID 作为请求消息密钥,并将此请求 UUID 作为关联的响应消息密钥。与 WebSphere MQ 具有消息关联 ID 的机制类型非常相似。

我的 end 2 结束流程是。

1). Kafka 客户端生成一个随机 UUID 并发送单个 Kafka 请求消息。 2).服务器将使用此请求消息提取并存储请求 UUID 值 3).使用消息负载完成业务流程。 4).使用请求消息中存储的 UUID 值作为响应消息密钥的响应消息进行响应。 5). Kafka 客户端轮询响应主题,直到超时或检索到具有原始请求 UUID 值的消息。

我担心的是 Kafka 消费者轮询将从响应主题中删除其他客户端消息并增加偏移量,使其他客户端失败。

我是否在尝试将 Kafka 应用到它从未设计过的用例中?

是否可以在 Kafka 中实现 request/response 消息传递?

尽管 Kafka 提供了方便的方法来为给定的消费者组保留提交的偏移量,但您不需要使用该行为,并且可以在需要时编写自己的行为。即便如此,按照您描述的方式使用 Kafka 对于用例来说还是有点尴尬,因为每个客户端都需要重复搜索主题以获得特定响应。这充其量是低效的。

您可以将问题分为两部分,继续使用 Kafka 向您的服务器发送请求和响应。您需要添加的唯一部分是您的客户与之交谈的某种 API 层,它封装了来自您的客户的 Kafka 特定逻辑。该层需要一个本地数据库(关系数据库或 NoSQL),它可以通过 uuid 存储响应,从而使 API 能够非常快速、轻松地回答特定 uuid 是否有响应。

理论上可以

  1. 为每个应该得到结果消息的请求和消息分配一个 ID;
  2. 创建一个哈希函数,将此 ID 映射到分区的标识符,
  3. 发送结果消息时,使用相同的哈希函数获取要发送到的分区的标识符,
  4. 在生产者中你只能观察到给定的分区。

这将减少抓取该主题中的许多消息以过滤出等待请求处理程序所需的结果的需要。

更简单!您只能在 zookeeper 上写下 UUID X 应该在分区 Y 上得到应答,并让发送该 UUID 的生产者使用分区 Y...这有意义吗?

我认为您需要调用请求的服务的明确定义的分片键。您的请求应包含此分片键和 post 响应的主题名称。此外,您应该创建某种状态机,当有关您的任务的消息出现时,您将转换到某种状态……这将用于严格的异步设计