如何使用 kafka 流在 kafka 中进行请求响应?

Posted

技术标签:

【中文标题】如何使用 kafka 流在 kafka 中进行请求响应?【英文标题】:How to do request-response in kafka with kafka stream? 【发布时间】:2020-04-19 05:19:15 【问题描述】:

我想用kafka流实现请求-响应模式,我使用spring boot kafka,它添加一些数据作为header,命名为correlation id,但是当kafka流API处理请求消息时,header数据会丢失,可以'不要发送到响应主题! 我该如何解决它,或者使用其他方法??

【问题讨论】:

表头数据是如何“丢失”的? Kafka 本身不仅会丢失部分消息负载。您(或 Spring Boot)将该标题放在哪里? 否,在 kafka 流中进行了一些重新分区操作,然后标头丢失 @zydzjy 为什么不尝试将标头放入 kafka 消息负载中?你使用了什么样的操作符导致重新分区? @TuyenLuong 我使用spring boot kafkaTemplate,它使用correlationId作为消息头,处理器包括重新分区操作 no,some re-partition operation in kafka stream,then header lost -- 你用的是什么版本? Kafka Streams 支持 v2.0 (cf ***.com/questions/46736484/…) 的标头——但我不确定你想要实现什么。 Kafka Streams 是为流处理而构建的,而不是 req/resp:你们中的意思是您的请求是输入主题中的消息,并且您对输出主题产生响应(这应该可以,但我不会称其为 req/resp模式;那是真正的流处理)。 【参考方案1】:

对于(201, accepted)以外的请求,您不会得到响应

数据会丢失

不,不会

无法发送到响应主题!

为什么不呢?

我该如何解决,或者使用其他方法??

使用 WebSockets 获取您的响应。

您可能想观看这个使用多个 Spring 应用程序的演讲。

https://www.confluent.io/kafka-summit-lon19/hello-streams-introducing-the-first-streams-mindset/

【讨论】:

以上是关于如何使用 kafka 流在 kafka 中进行请求响应?的主要内容,如果未能解决你的问题,请参考以下文章

kafka的客户端限流(资源配额)

kafka的客户端限流(资源配额)

kafka基本概念

Kafka从入门到进阶

从多个 Kafka 主题读取的 Spark 结构化流式应用程序

如何配置Kafka RPC调用者主题和组