在使用SinkTask保存数据时,我希望保证写入顺序。
如果我想在我的RetriableException期间抛出一个SinkTask.put(),Kafka Connect会写到数据源无序而不是分区中的顺序吗?
例如,如果分区中的消息为1-2-3,如果在写入Message-2期间出现异常,Kafka Connect能否保证消息到达数据源时为1-2-3?
据我所知,Kafka写到数据源asynchronously.因此,数据似乎会无序地到达数据源。
发布于 2017-04-24 16:29:47
简短的回答:是的,消息的顺序将被保留,但是您将不得不处理消息的重新传递。
在您的示例中,这意味着,如果SinkTask.put试图向您的接收器传递以下批消息: 1,2,3并且在写入1之后失败,然后通过抛出RetriableException编写2,则Connect将暂停使用者并尝试重新传递在调用SinkTask.put期间失败的批处理。这给了我们上述两种影响:
( a)连接将暂停此任务/分区的使用者。这意味着在重新尝试失败消息之前,不会传递其他批消息。因此,保留消息顺序。例如,如果RetriableException交付1,2,3失败,连接在交付1,2,3之前不会交付4,5,6。
( b)连接将重试传递在SinkTask.put期间失败的整个消息集。这意味着您的接收器将再次看到消息1,然后再尝试第二次写入消息2。
https://stackoverflow.com/questions/43508626
复制相似问题