小编Orr*_*ani的帖子

在使用幂等生产者时,Kafka的订购保证为何不一致?

我在我的应用程序中使用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可能会更改记录的顺序,因为如果将两个批次发送到单个分区,并且第一个批次失败并被重试,但是第二个批次成功,则记录在第二批中可能会首先出现。

使能

当设置为“ true”时,生产者将确保每个消息的确切副本被写入流中。如果为“ false”,则生产者由于代理失败等原因而重试,可能会将重试消息的副本写入流中。请注意,启用幂等性要求max.in.flight.requests.per.connection小于或等于5,重试大于0,ack必须为“ all”。如果用户未明确设置这些值,则将选择合适的值。如果设置了不兼容的值,则将引发ConfigException。

我的配置似乎符合要求,但它们似乎不一致。

我必须与OutOfOrderSequenceException有关的另一个问题是:根据文档,如果得到此异常,则意味着生产者有可能出现故障。但是,如果我的生产者配置了,max.in.flight.requests.per.connection = 5并且说第二个请求出现了乱序异常,那么以下所有已经运行的请求又会发生什么呢?这是否意味着我确定会出现故障?

idempotent apache-kafka kafka-producer-api

6
推荐指数
1
解决办法
238
查看次数