我在kafka connect SinkTask实现中具有以下代码。对于严重异常,我想在任务中调用stop()
并停止该任务。
我需要知道是否转到stop()
时,kafka connect是否会提交kafka主题分区中的偏移量吗?即,如果我处理异常,将其记录下来,基于该异常执行一些活动并调用stop()
,是否因为put()
中没有异常而提交了主题的偏移量(应用程序主题)?我假设因为从put()
没有成功运行,或者未完成批次(基于最大轮询记录),所以偏移不应该完成,所以当我重试时,不会丢失任何记录。请让我知道是否有人提出补偿建议?
代码:
public class ExampleSinkTask extends SinkTask {
@Override
public void start(Map<String, String> map) {
....
}
@Override
private void doSomeCriticalOperation() {
// call stop if critical operation fails.
...
// Exception handled, close the task (allow user interference in such cases)
stop();
}
@Override
public void put(Collection<SinkRecord> collection) {
..
doSomeCriticalOperation();
..
}
@Override
public void stop() {
log.info("*** Stopping Kafka task completely ***");
System.exit(0);
}
}