生产者从服务器收到的错误有可能是临时性的错误(比如分区找不到首领)。在这种情况下, retries参数的值决定了生产者可以重发消息的次数,如果达到这个次数,生产者会放弃重试并返回错误。默认情况下,生产者会在每次重试之间等待100ms ,可以通过retry.backoff.ms 参数来配置时间间隔。

比如,设置了acks=allmin.insync.replicas=2。由于某种原因,所有follower都挂了,由于min.insync.replicas=2,所以生产者无法收到来自Broker端的ack

此时我们会从Producer端收到一个错误消息:“Broker: Not enough in-sync replicas”。这就意味着Kafka不能在Broker上追加生产的消息(数据)了,因为此时的ISR的数量不够。此时在Broker端会有如下的错误消息:

org.apache.kafka.common.errors.NotEnoughReplicasException: ThesizeofthecurrentISRSet(0) isinsufficienttosatisfythemin.isrrequirementof 2 forpartition

默认情况下,Producer不会对此错误进行处理,这就会造成消息丢失,即**at-most-once **语义。我们可以通过配置重试次数来让生产者重新发送消息。比如配置retries=3,默认为0

总结

  • 生产环境这个参数是一定要设置的
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐