如果我将 Producer 的 Kafka 配置参数设置为:
1. retries = 3
2. max.in.flight.requests.per.connection = 5
那么很可能一个分区中的消息可能不在 send_order 中。
Kafka 是否采取任何额外步骤来确保分区内的消息仅保持发送顺序,或者使用上述配置,分区内可能有乱序消息?
如果我将 Producer 的 Kafka 配置参数设置为:
1. retries = 3
2. max.in.flight.requests.per.connection = 5
那么很可能一个分区中的消息可能不在 send_order 中。
Kafka 是否采取任何额外步骤来确保分区内的消息仅保持发送顺序,或者使用上述配置,分区内可能有乱序消息?
抱歉不行。
使用您当前的配置,由于您的retries
和max.in.flight.requests.per.connection
设置,消息可能会无序到达。
retries
如果 config 设置为大于 0,您将在以下情况下失去排序(只是一个带有随机数的示例):
我可能是错的,但在这种情况下,即使max.in.flight.requests.per.connection
设置为 1 也可能会发生重新排序,如果代理故障转移,您可能会丢失消息顺序,例如,可以在前一个失败的批处理计算出它应该去之前将批处理发送到代理那个经纪人也是。
关于max.in.flight.requests.per.connection
并retries
设置在一起,它甚至更简单 - 如果您对代理有多个未确认的请求,则第一个失败的请求将无序到达。
但是,请注意这仅适用于消息/批次由于某种原因无法确认的情况(发送给错误的代理、代理死亡等)
希望这可以帮助