生产者重试时分区中的 Kafka 消息排序
Kafka message ordering in partition while producer retry
根据生产者配置,有:重试和max.in.flight.requests.per.connection。假设 重试 > 0 并且 max.in.flight.requests.per.connection > 1.
消息能否在主题的 ONE 分区内乱序到达(例如,如果第一条消息已重试,但第二条消息在第一次尝试时传递给代理)?
或者乱序只发生在主题的几个分区中,但在分区内顺序被保留?
如果您将 retries
设置为大于 0 并将 max.in.flight.requests.per.connection
设置为大于 1,那么是的消息可能会乱序到达代理,即使它们是针对同一分区也是如此。
如果消息被正确添加到 Kafka 日志并且在将响应发送回客户端时发生错误,您也可以有重复项。
从Kafka 0.11开始,可以使用幂等生产者来解决这两个问题。参见 http://kafka.apache.org/documentation/#semantics
根据最新的更新文档,您最多可以有 5 个 max.in.flight.requests.per.connection
,Kafka 可以为此维护顺序。
根据生产者配置,有:重试和max.in.flight.requests.per.connection。假设 重试 > 0 并且 max.in.flight.requests.per.connection > 1.
消息能否在主题的 ONE 分区内乱序到达(例如,如果第一条消息已重试,但第二条消息在第一次尝试时传递给代理)?
或者乱序只发生在主题的几个分区中,但在分区内顺序被保留?
如果您将 retries
设置为大于 0 并将 max.in.flight.requests.per.connection
设置为大于 1,那么是的消息可能会乱序到达代理,即使它们是针对同一分区也是如此。
如果消息被正确添加到 Kafka 日志并且在将响应发送回客户端时发生错误,您也可以有重复项。
从Kafka 0.11开始,可以使用幂等生产者来解决这两个问题。参见 http://kafka.apache.org/documentation/#semantics
根据最新的更新文档,您最多可以有 5 个 max.in.flight.requests.per.connection
,Kafka 可以为此维护顺序。