Spring boot 卡夫卡重试如何处理request.timeout。?

Spring boot 卡夫卡重试如何处理request.timeout。?,spring-boot,apache-kafka,kafka-producer-api,Spring Boot,Apache Kafka,Kafka Producer Api,我已将生产者配置为request.timeout.ms=700000ms,重试次数=5次。我怀疑这到底是怎么回事 此“request.timeout.ms=70000”过期后,它将重试5次,或在给定的“request.timeout.ms=70000”范围内,使用retry.backoff.ms值重试5次。?需要注意三个重要配置: “request.timeout.ms”-重试单个请求的时间 “delivery.timeout.ms”-完成整个发送操作的时间 “重试”-当代理响应可重试错误时重

我已将生产者配置为request.timeout.ms=700000ms,重试次数=5次。我怀疑这到底是怎么回事


此“request.timeout.ms=70000”过期后,它将重试5次,或在给定的“request.timeout.ms=70000”范围内,使用retry.backoff.ms值重试5次。?

需要注意三个重要配置:

  • “request.timeout.ms”-重试单个请求的时间
  • “delivery.timeout.ms”-完成整个发送操作的时间
  • “重试”-当代理响应可重试错误时重试的次数
ApacheKafka建议设置“delivery.timeout.ms”,并保留其他两个配置的默认值。这个想法是,作为一个用户,你应该担心的主要问题是,在放弃卡夫卡之前,你要花多长时间才能让它明白。卡夫卡到底花了多少时间并不重要——连接、获取元数据、排长队等等,唯一重要的是你愿意等待多久

现在回答您的问题-request.timeout.ms适用于每次重试。因此,生产者将发送记录批给卡夫卡,如果没有响应7000毫秒后,它会认为这是一个失败,并重试。请注意,大多数错误(例如,NoLeaderorPartition)将更快地从代理返回(这就是为什么需要重试退避)


用retries+request.timeout.ms来推断交付时间几乎是不可能的,即使对于编写制作人的人来说也是如此。因此,delivery.time.ms的引入有一个非常明确的约定。

因此,如果我将重试次数设为5次,并将request.timeout.ms设为70000毫秒,则总重试次数将为5*70000=350万毫秒。?。请帮助我理解。这是不正确的,很难解释的事实正是为什么您不应该触摸
request.timeout.ms
retries
并使用
delivery.timeout.ms
。基本上,请求超时不是重试的唯一原因,重试的请求也不是唯一需要时间的事情。您等待的时间可能(通常会短得多),也可能更长(如果需要元数据)。