在Kaka Producer中配置重试的最佳方法



同步副本配置为Acks=allmin.insync。replicas = N

想了解如何为未处理的生产者记录的消息/记录配置重试

的例子:当Kafka处理失败时,在线ISR记录在处理过程中为N-1,最小配置ISR为N个副本。

什么是acks

?acks参数控制在生产者认为写入成功之前必须有多少分区副本接收到记录。

acks参数有3个值:

ack=0,则生产者在假定消息发送成功之前不会等待broker的回复。

ack=1,在leader副本收到消息的那一刻,生产者将从broker收到一个成功的响应。如果消息不能写入leader,生产者将收到一个错误响应,可以重试。

ack=all,一旦所有同步副本收到消息,生产者将从代理收到一个成功的响应。

在您的示例中,acks=all,这是最安全的方法,因为您可以确保多一个代理拥有该消息。

重试:

如果生产者收到错误消息,则retries属性的值出现在图片中。你可以使用retry.backoff.ms属性配置重试之间的时间间隔。建议测试从崩溃的代理中恢复需要多长时间,并设置重试次数和重试之间的延迟,这样重试所花费的总时间将长于Kafka集群从头恢复所需的时间。

还有,查看下面的链接,

https://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/

对于上述场景,您将获得NotEnoughReplicasException。在这个阶段,卡夫卡回复信息对于kafka <=2.0,默认重试值为0,对于kafka>=2.1,该值设置为非常高的值此外,还有另一个名称为"retry.backof.ms"的设置。此设置的默认值为100ms。Kafka生产者将每100毫秒重试一次,直到它获得成功。若要避免重试无限次,也可以设置"delivery. timeout .ms";以确保Producer在这一毫秒内重新尝试发送消息。缺省值为120000ms。只有2分钟。意味着,生产者将在2分钟后不再重试,并认为消息失败。此外,您可能需要考虑"max.in.flight.requests"当你的Kafka消息中有一个Key时,设置确保重试消息被顺序处理

相关内容

最新更新