Kafka 同步发送与飞行请求

Kafka syncronous send vs inflight requests

如果我使用 -

同步发送消息
producer.send(myRecord).get();

我能保证消息到达各个分区的顺序与发送顺序相同吗?

或者我还需要设置 max.in.flight.requests.per.connection=1

(目前max.in.flight.requests.per.connection设置为大于1,所以我需要先弄清楚这一点,然后才能建议将其设置为1,只有在需要的时候才推荐。这是强制性的)。

我目前的理解是-

producer.send(myRecord).get();

还将处理重试。直到第一个记录成功或重试 N 次失败后,才会处理下一条记录。只有在第一条记录失败或成功后,第二条记录才会 processed/sent 到代理。

不,您不能保证消息会以相同顺序到达相关分区。因为“max.in.flight.requests.per.connection”配置的默认值为5。 如果你没有设置 1,那将尝试 5 次。而在这个过程中你可能会失去正确的排名。 这里有一些参考;

https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html#producerconfigs_max.in.flight.requests.per.connection

https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html#producerconfigs_max.in.flight.requests.per.connection

你是对的,producer.send().get() 应该确保排序。另一种确保顺序的方法是设置max.in.flight.requests.per.connection=1,这允许您异步发送消息,并且批处理可以启动,因此效率更高。