Kafka Connect在RetriableException异常时能否保证写入顺序?

Can Kafka Connect guarantee the write order when RetriableException occurs?

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

如果我想在我的 SinkTask.put() 期间抛出 RetriableException,Kafka Connect 写入数据源 [=26] =] 比分区中的顺序?

比如一个partition中的消息是1-2-3,如果写入Message-2时出现异常,Kafka Connect能保证消息到达数据源的是1-2-3吗?

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

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

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

a) Connect 将为此 task/partition 暂停消费者。这意味着在重试失败的消息之前,不会发送其他批消息。因此,消息顺序得以保留。例如。如果传送 1,2,3 失败并出现 RetriableException,Connect 将不会在传送 1,2,3 之前传送 4,5,6。

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