我需要我的flink作业以指定的时间间隔从数据库中提取记录,并在处理后将其存档。我已经实现了SourceFunction以从数据库中获取所需的记录,并将SourceFunction添加为StreamExecutionEnvironment的源。如何指定每10分钟使用SourceFunction通过StreamExecutionEnvironment从数据库中获取记录?
SourceFunction:
public class MongoDBSourceFunction implements SourceFunction<List<Book>>{
public void cancel() {
// TODO Auto-generated method stub
}
public void run(org.apache.flink.streaming.api.functions.source.SourceFunction.SourceContext
<List<Book>> context) throws Exception {
List<Book> books = getBooks();
context.collect(books);
}
public List<Book> getBooks() {
List<Book> books = new ArrayList<Book>();
//fetch all books from database
return books;
}
}
处理器:
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
public class ArchiveJob {
public static void main(String[] args) {
final StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();
env.addSource(new MongoDBSourceFunction()).print();
}
}
答案 0 :(得分:2)
您需要将此功能添加到MongoDBSourceFunction
本身。例如,您可以在ScheduledExecutorService
方法中实例化一个open
并使用该执行程序安排读取任务。
请注意,在发出记录时保持检查点锁定很重要。