设置 in.flight.requests.per.session=1 并重试 > 1 如何帮助保留 Kafka 分区中的消息顺序?



在我正在读的一本书中,它说,如果订购很重要,我们建议在重试时设置为.fflight.requests.per.session=1>1

当消息异步发送时,这对消息排序有什么帮助?

假设5条消息A、B和C、D、E将转到分区1。

A发送成功,B发送(将来会失败(,C发送,现在由于B失败,再次发送。保持.fflight.requests.per.session=1只是确保当B被重试时,D和E不会在B之前到达分区,但它仍然无助于阻止C在B之前。

如果我没有错的话,max.in.flight.requests.per-session在Kafka中不存在,但max.in.flight.requests.p.connection存在.

无论如何,生产者将为每个分区使用一个批,并且max.in.flight request.connection应该设置为1,以确保在重试场景中严格的排序保证:

文档中写道:

允许在不设置max.in.flight.requests.per-connection的情况下重试为1可能会更改记录的顺序,因为如果两个批处理被发送到单个分区,第一个分区失败重试,但第二次成功,然后是第二批中的记录可能首先出现。另外请注意,生产请求将如果超时,则在重试次数用完之前失败由delivery.timeout.ms配置,在成功之前先过期确认用户通常应该更喜欢离开此配置取消设置,而是使用delivery.timeout.ms来控制重试行为。

最新更新