两个同步客户端可以使用相同的请求/答复主题吗

时间:2020-09-04 03:23:39

标签: apache-kafka spring-kafka

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

2 个答案:

答案 0 :(得分:2)

请参见the documentation

使用相同的答复主题时,有两个选项:

  1. 丢弃意外回复:

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

  1. 使用专用分区:

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

答案 1 :(得分:1)

如果两个使用者都在不同的使用者组中,则多个使用者可以阅读和处理来自同一主题的相同消息。