首页 > 解决方案 > 两个同步客户端可以使用相同的请求/回复主题吗

问题描述

我有一个用户服务正在监听请求主题并返回用户对象。我需要从两个不同的服务同步调用此服务,并想确认它们是否可以使用相同的请求/响应主题名称来请求用户对象?

标签: apache-kafkaspring-kafka

解决方案


请参阅文档

使用相同的回复主题时有两种选择:

  1. 丢弃意外回复:

配置单个回复主题时,每个实例必须使用不同的 group.id。在这种情况下,所有实例都会收到每个回复,但只有发送请求的实例才能找到相关 ID。这对于自动缩放可能很有用,但会产生额外网络流量的开销以及丢弃每个不需要的回复的小成本。使用此设置时,我们建议您将模板设置sharedReplyTopic为 true,这会降低对 DEBUG 的意外回复的日志记录级别,而不是默认的 ERROR。

  1. 使用专用分区:

如果您有多个客户端实例并且您没有按照上一段中的讨论配置它们,则每个实例都需要一个专用的回复主题。另一种方法是为每个实例设置KafkaHeaders.REPLY_PARTITION并使用专用分区。Header 包含一个四字节的 int (big-endian)。服务器必须使用此标头将回复路由到正确的分区(@KafkaListener这样做)。但是,在这种情况下,回复容器不能使用 Kafka 的组管理功能,并且必须配置为侦听固定分区(通过TopicPartitionOffset在其ContainerProperties构造函数中使用 a)。


推荐阅读