【发布时间】:2018-10-03 14:23:36
【问题描述】:
我在我的应用程序中使用 Kafka 1.0.1,并且我已经开始使用 0.11 中引入的 Idempotent Producer 功能,但在使用 Idempontent 功能时我无法理解排序保证。
我的制作人的配置是:
enable.idempotence = true
max.in.flight.requests.per.connection = 5
retries = 50
acks = all
根据文档:
重试
设置大于零的值将导致客户端重新发送发送失败并可能出现暂时错误的任何记录。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。在不将 max.in.flight.requests.per.connection 设置为 1 的情况下允许重试可能会改变记录的顺序,因为如果将两个批次发送到单个分区,并且第一个批次失败并被重试,但第二个批次成功,那么记录第二批可能会先出现。
enable.idempotence
当设置为“true”时,生产者将确保每条消息的副本都写入流中。如果为“false”,则生产者由于代理失败等原因重试,可能会在流中写入重试消息的副本。请注意,启用幂等性要求 max.in.flight.requests.per.connection 小于或等于 5,重试次数大于 0 并且 acks 必须为“全部”。如果用户没有明确设置这些值,则将选择合适的值。如果设置了不兼容的值,则会抛出 ConfigException。
我的配置似乎符合要求,但它们似乎没有对齐。
另一个与OutOfOrderSequenceException 有关的问题:
根据文档,如果我收到此异常,则意味着生产者有可能出现故障。但是,如果我的生产者配置了max.in.flight.requests.per.connection = 5,并且假设第二个请求出现了乱序异常,那么以下所有已经在运行的请求会发生什么情况?这是否意味着我肯定有问题?
【问题讨论】:
标签: apache-kafka kafka-producer-api idempotent