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

时间:2017-04-20 01:20:03

标签: apache-kafka apache-kafka-connect

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

如果我想在SinkTask.put()期间抛出一个RetriableException,那么Kafka Connect将无法写入数据源 乱序 而不是分区中的订单?

例如,如果分区中的消息是1-2-3,如果在写入Message-2期间发生异常,Kafka Connect是否可以保证到达数据源的消息是1-2-3?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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