Kafka 提交偏移量
Kafka commit offset
Kafka手动提交offset,失败时怎么办?
示例 -> 假设偏移量 0 已提交,偏移量 1 未 已提交,然后偏移量 2 已提交。偏移量 1 处的消息是否重试?
这取决于你如何提交:
在 commitSync
假设您像示例中那样分别提交每个偏移量,如果未提交偏移量 1,它将重试提交该偏移量,直到成功或遇到不可重试的失败。
该机制的一个缺点是在代理响应之前应用程序被阻塞,因此限制了应用程序吞吐量。
另一方面,在 commitAsync
上,如果提交偏移量 1 失败,则不会重试。原因是当代理响应返回到您的 Kafka 客户端时,可能后来提交已经成功了。
假设在您的示例中,由于临时网络问题,偏移量为 1 的消息提交失败。与此同时,应用程序已经成功处理了偏移量为 2 的消息。如果我们现在重试之前失败的提交,它可能会成功提交偏移量 1 after 2 已经提交。在重新平衡的情况下,这将导致更多重复。
Kafka手动提交offset,失败时怎么办? 示例 -> 假设偏移量 0 已提交,偏移量 1 未 已提交,然后偏移量 2 已提交。偏移量 1 处的消息是否重试?
这取决于你如何提交:
在 commitSync
假设您像示例中那样分别提交每个偏移量,如果未提交偏移量 1,它将重试提交该偏移量,直到成功或遇到不可重试的失败。
该机制的一个缺点是在代理响应之前应用程序被阻塞,因此限制了应用程序吞吐量。
另一方面,在 commitAsync
上,如果提交偏移量 1 失败,则不会重试。原因是当代理响应返回到您的 Kafka 客户端时,可能后来提交已经成功了。
假设在您的示例中,由于临时网络问题,偏移量为 1 的消息提交失败。与此同时,应用程序已经成功处理了偏移量为 2 的消息。如果我们现在重试之前失败的提交,它可能会成功提交偏移量 1 after 2 已经提交。在重新平衡的情况下,这将导致更多重复。