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



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

如果我想在SinkTask.put()期间抛出一个可尝试的异常,Kafka Connect写入数据源的顺序会比分区中的顺序不合吗?

例如,如果分区中的消息为 1-2-3,如果在写入消息 2 时发生异常,Kafka Connect 能否保证到达数据源的消息为 1-2-3?

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新