在我们的应用程序中,对于导致数据更新/插入数据库的每个请求(REST 端点 POST 调用(,我们必须向 Kafka 发布/生成一条消息供下游系统使用并进行进一步处理。
而且,我们应用程序中大多数 POST 请求的 SLA 为 5 秒,并且大多数 POST 调用都是同步的。这意味着,在 POST 调用中完成的任何处理都应在 5 秒内完成,以避免超时问题。
通过此设置,如果假设我结束了数据库调用和调用以在 POST 调用中向 Kafka 生成消息,我的问题是,我如何控制/设置我的 kafka 生产者在获得代理响应之前可以等待的最长时间?
request.timeout.ms
可以是您要查找的配置:
request.timeout.ms:配置控制客户端等待请求响应的最长时间。如果 在超时结束之前未收到响应,客户端将 如有必要,请重新发送请求,如果重试次数 用尽。这应该大于
replica.lag.time.max.ms
(a 代理配置(以减少消息重复的可能性 由于不必要的生产者重试。
对于版本 2.1 或更高版本,您还应考虑设置delivery.timeout.ms
。
delivery.timeout.ms:调用 send(( 返回后报告成功或失败的时间上限。这限制了总时间 记录将在发送前延迟,等待时间 来自经纪人的确认(如果预期(和允许的时间 对于可重试的发送失败。生产者可能会报告发送失败 如果出现不可恢复的错误,则早于此配置记录 遇到、重试次数已用尽或已添加记录 到达到较早交货到期期限的批次。这 此配置的值应大于或等于
request.timeout.ms
和linger.ms
.
有关delivery.timeout.ms
的更多信息,您可以查看此链接。