发生RetriableException时Kafka Connect能否保证写入顺序?

Gli*_*ide 5 apache-kafka apache-kafka-connect

我想保证使用保存数据时的写入顺序SinkTask

如果我想在我的过程中抛出 RetriableException SinkTask.put()写入Kafka Connect数据源的顺序会比分区中的顺序乱吗?

比如某个分区的消息是1-2-3,如果写入Message-2出现异常,Kafka Connect能否保证到达数据源的消息是1-2-3?

据我所知,Kafka Connect异步写入数据源。因此,数据似乎会无序到达数据源。

Kon*_*sis 3

简短的回答:是的,消息的顺序将被保留,但您必须处理消息的重新传递。

在您的示例中,这意味着,如果SinkTask.put尝试向接收器传递以下一批消息:1,2,3,并且在写入 1 后和写入 2 之前通过抛出 RetriableException 失败 Connect 将暂停使用者并尝试重新交付在调用SinkTask.put期间失败的批处理。这给了我们前面提到的两个效果:

a) Connect 将暂停该任务/分区的使用者。这意味着在重试失败的消息之前不会传递其他批次的消息。因此,消息顺序被保留。例如,如果交付 1,2,3 因RetriableException失败,Connect 将不会在交付 1,2,3 之前交付 4,5,6。

b) Connect 将重试传递在SinkTask.put期间失败的整个消息集。这意味着您的接收器在尝试第二次写入消息 2 之前将再次看到消息 1。