Apache flink 什么是SourceFunction#run应该在Flink中工作?
我通过扩展Flink不支持的消息队列的Apache flink 什么是SourceFunction#run应该在Flink中工作?,apache-flink,Apache Flink,我通过扩展Flink不支持的消息队列的RichSourceFunction实现了一个源代码 当我实现签名为的run方法时: override def run(sc: SourceFunction.SourceContext[String]): Unit = { val msg = read_from_mq sc.collect(msg) } 调用run方法时,如果消息队列中没有更新的消息 我应该在不调用sc.collect的情况下运行吗 我可以等到更新的数据到来(在这
RichSourceFunction
实现了一个源代码
当我实现签名为的run方法时:
override def run(sc: SourceFunction.SourceContext[String]): Unit = {
val msg = read_from_mq
sc.collect(msg)
}
调用run
方法时,如果消息队列中没有更新的消息
run
方法将被阻止)我更喜欢第二个,不确定这是否是正确的用法。因为您可能知道这两个选项在功能上都是正确的,并且会产生正确的结果
这是说,第二个是首选的,因为你没有举行线程。事实上,如果您查看RabbitMQ连接器实现,您会注意到它的实现方式是这样的:在其
运行中
它会间接地等待消息被放置到阻塞队列
,因为您可能知道这两个选项在功能上都是正确的,并且会产生正确的结果
这是说,第二个是首选的,因为你没有举行线程。事实上,如果您查看RabbitMQ连接器实现,您会注意到它的实现方式是这样的:在它的
运行
内部,它间接地等待消息被放置在阻塞队列
上,Flink源的run方法应该循环,无休止地生成输出,直到调用它的cancel方法为止。当没有什么可生产时,最好能找到一种方法进行阻塞等待
这是另一个用作模型的合理示例。您会注意到,当它无事可做时,它会休眠一段可配置的时间间隔。Flink源的run方法应该循环,无休止地生成输出,直到调用其cancel方法为止。当没有什么可生产时,最好能找到一种方法进行阻塞等待 这是另一个用作模型的合理示例。您会注意到,当它无事可做时,它会在一个可配置的时间间隔内休眠