作为Kafka的新人,我试图理解Kafka的重试概念。将完成什么样的基础重试过程?示例重试我们设置为7的参数。现在问题来了,Kafka将在所有7次重审?会一直尝试直到成功吗?如果是这样的话,Kafka将如何认识成功?如果这取决于任何一个参数,那么这个参数是什么,如何确定?
ui7jx7zq1#
在分布式系统中,重试是不可避免的。从网络错误到复制问题,甚至下游依赖中的中断,大规模运行的服务必须做好准备,尽可能优雅地遇到、识别和处理故障。kafka将重试,直到启动的进程成功完成或重试计数为零。kafka维护每个api调用(生产者、消费者和流)的状态,如果错误条件满足,则重试次数减少。请通过以下url中sender.java的completebatch函数获取更多信息。https://github.com/apache/kafka/blob/68ac551966e2be5b13adb2f703a01211e6f7a34b/clients/src/main/java/org/apache/kafka/clients/producer/internals/sender.java
fae0ux8s2#
我猜你说的是制作人试图发送失败的消息。从Kafka制作人检索财产文件-“设置一个大于零的值将导致客户端重新发送其发送失败并可能出现暂时性错误的任何记录。”这意味着Kafka生产者将重试,如果它遇到的错误被认为是“可重试”。并不是所有的错误都是可检索的——例如,如果目标Kafka主题不存在,那么尝试再次发送消息就没有意义了。但是,如果连接被中断,再次尝试是有意义的。需要注意的重要事项-只有在设置了broker ack!=0因此,在您的示例中,配置了7次重试。我假设ack被设置为一个不同于0的值,因为这样就不会尝试重试。如果您的消息因不可重试的错误而失败,kafka生产者将不会再次尝试发送该消息(它实际上会“放弃”该消息并继续发送下一条消息)。如果您的邮件因可重试错误而失败,kafka producer将重试发送,直到邮件成功发送,或者直到重试次数用尽(当尝试了7次但没有一次成功时)。kafka客户端生产者知道您的消息何时成功发送到代理,因为当ack设置为1\all时,kafka代理将“确认”收到的任何消息并通知生产者(在生产者和代理之间进行某种握手)。请参阅acks&retries@https://kafka.apache.org/documentation/#producerconfigs
2条答案
按热度按时间ui7jx7zq1#
在分布式系统中,重试是不可避免的。从网络错误到复制问题,甚至下游依赖中的中断,大规模运行的服务必须做好准备,尽可能优雅地遇到、识别和处理故障。
kafka将重试,直到启动的进程成功完成或重试计数为零。
kafka维护每个api调用(生产者、消费者和流)的状态,如果错误条件满足,则重试次数减少。
请通过以下url中sender.java的completebatch函数获取更多信息。
https://github.com/apache/kafka/blob/68ac551966e2be5b13adb2f703a01211e6f7a34b/clients/src/main/java/org/apache/kafka/clients/producer/internals/sender.java
fae0ux8s2#
我猜你说的是制作人试图发送失败的消息。
从Kafka制作人检索财产文件-
“设置一个大于零的值将导致客户端重新发送其发送失败并可能出现暂时性错误的任何记录。”
这意味着Kafka生产者将重试,如果它遇到的错误被认为是“可重试”。并不是所有的错误都是可检索的——例如,如果目标Kafka主题不存在,那么尝试再次发送消息就没有意义了。但是,如果连接被中断,再次尝试是有意义的。
需要注意的重要事项-只有在设置了broker ack!=0
因此,在您的示例中,配置了7次重试。
我假设ack被设置为一个不同于0的值,因为这样就不会尝试重试。
如果您的消息因不可重试的错误而失败,kafka生产者将不会再次尝试发送该消息(它实际上会“放弃”该消息并继续发送下一条消息)。
如果您的邮件因可重试错误而失败,kafka producer将重试发送,直到邮件成功发送,或者直到重试次数用尽(当尝试了7次但没有一次成功时)。
kafka客户端生产者知道您的消息何时成功发送到代理,因为当ack设置为1\all时,kafka代理将“确认”收到的任何消息并通知生产者(在生产者和代理之间进行某种握手)。
请参阅acks&retries@https://kafka.apache.org/documentation/#producerconfigs