Kafka文档中的Producer Config参数retries
指出,对于潜在的瞬时错误,将进行重试。
设置大于零的值将导致客户端重新发送失败并可能出现暂时错误的任何记录。请注意,此重试与客户端在收到错误时重新发送记录没有什么不同。允许重试而不将每个连接的最大飞行请求数设置为1可能会更改记录的顺序,因为如果向单个分区发送两个批次,并且第一个批次失败并重试,但第二个批次成功,则第二个批次中的记录可能会首先出现。
1.这些 * 潜在的瞬时错误 * 是什么?什么情况会导致这些“瞬时错误”?
1.在源代码中,我看到有一个RetriableException
接口,TimeoutException
实现了它。但我观察到,重试并不发生在org.apache.kafka.clients.producer
的send(ProducerRecord<K,V> record)
方法抛出的每个超时异常中。所以,我在这里错过了什么...当retries
param大于0时,不是所有的RetriableException
都被重试吗?
1条答案
按热度按时间qgzx9mmu1#
关于“潜在的瞬时”和“永久”错误,这很简单。
潜在瞬时错误是暂时性错误,有可能在合理的时间内自动解决:连接错误、临时状态(分区没有引线)等。
另一方面,永久性错误是那些无法通过重试解决的错误,并且很可能需要手动干预:例如,如果一个主题不存在,并且不是自动创建的,那么它将需要一些外部实体(例如人类)来创建它。
您可以找到哪些错误是可检索的,例如在这里:https://kafka.apache.org/25/generated/protocol_errors.html
关于生产者代码中的退休,看起来它们是在不同的级别上完成的。如果你跟踪
RETRIES_CONFIG
的使用情况,你会看到org.apache.kafka.clients.producer.KafkaProducer
传递它来创建一个org.apache.kafka.clients.producer.internals.Sender
,它实际上是“处理向Kafka集群发送生产请求的后台线程”。它有canRetry()
方法,在那里决定是否重试发送。