Hi, 是的,感觉你是对的。 `JdbcOutputFormat` 会被 wrap 在 `OutputFormatSinkFunction` 中,而 `OutputFormatSinkFunction` 没有继承 `CheckpointedFunction`,所以没法在 snapshotState 时候调用format.flush。 WDYT @Jark @ Leonard
Best, Hailong 在 2020-12-09 17:13:14,"jie mei" <meijie.w...@gmail.com> 写道: >Hi, Community > >JDBC connector似乎无法确保buffer中的数据在checkpoint的时候全部入库。这是因为 >OutputFormat中没有一个接口,供checkpoint的时候调用。 从JDBC的connector的 >代码来看,只能设定一个超时时间用以刷新数据,但还是可能存在丢数据的case。 > >我的问题是:是否有办法强制刷新buffer中的数据入库? > > >@Public >public interface OutputFormat<IT> extends Serializable { > > /** > * Configures this output format. Since output formats are >instantiated generically and hence parameterless, > * this method is the place where the output formats set their >basic fields based on configuration values. > * <p> > * This method is always called first on a newly instantiated output format. > * > * @param parameters The configuration with all parameters. > */ > void configure(Configuration parameters); > > /** > * Opens a parallel instance of the output format to store the >result of its parallel instance. > * <p> > * When this method is called, the output format it guaranteed to >be configured. > * > * @param taskNumber The number of the parallel instance. > * @param numTasks The number of parallel tasks. > * @throws IOException Thrown, if the output could not be opened >due to an I/O problem. > */ > void open(int taskNumber, int numTasks) throws IOException; > > > /** > * Adds a record to the output. > * <p> > * When this method is called, the output format it guaranteed to be opened. > * > * @param record The records to add to the output. > * @throws IOException Thrown, if the records could not be added to >to an I/O problem. > */ > void writeRecord(IT record) throws IOException; > > /** > * Method that marks the end of the life-cycle of parallel output >instance. Should be used to close > * channels and streams and release resources. > * After this method returns without an error, the output is >assumed to be correct. > * <p> > * When this method is called, the output format it guaranteed to be opened. > * > * @throws IOException Thrown, if the input could not be closed properly. > */ > void close() throws IOException; >} > > >-- > >*Best Regards* >*Jeremy Mei*