0

如何使用 Apache Kafka 实现请求/回复模式?实施还应与服务实例的扩展(kubernetes 中的 fe pod)一起使用。

在 rabbit 中,我可以为每个接收来自其他服务的响应的实例创建临时的非持久唯一队列。当连接丢失时(当服务实例关闭时),此队列将自动删除。

我怎么能用卡夫卡做到这一点?如何扩展此解决方案?

我使用节点 js

4

1 回答 1

1

鉴于您的 Rabbit 示例仅讨论用于接收响应的通道(忽略发送请求),因此最实用(因为 Kafka 不能特别好地处理动态主题创建/删除)有一个主题来响应该服务无论您需要多少分区来满足您的吞吐量目标。请求者实例将随机选择一个要使用的分区(多个实例可以使用同一个分区)并将该分区和唯一的相关 ID 与请求通信。然后将响应生成到所选分区并使用相关 ID 进行键控。请求者跟踪他们正在等待的相关 ID 集,并忽略带有不在该集中的键的响应。

通过让请求者相互协调(可能使用诸如 etcd/zookeeper/consul 之类的东西),可以减轻相关 ID 冲突的风险。

这不是 Kafka 非常适合的消息传递模式(它绝对不是最好的),但它是可行的。

于 2021-09-03T13:05:31.150 回答