我使用flink来开发java的流工作,我的例子中,有两个数据源:a和b。在我的例子中,有两个数据源:a和b。a一直生成布尔数据:true或false。我试图实现这样一个目标。
if get false from A get data from B and do some process else do nothing
我怎么能给我的streaming工作编码?
vqlkdk9b1#
flink工作在一个推的模型上,而不是拉的模型。所以你不 "从b获取数据",相反,每当数据从b到达时,你的操作符就会被调用。假设你对数据源a使用的是一个广播流,那么你可以忽略(丢弃)来自b的数据,或者缓冲它,当你得到一个真实的来自的数据时进行处理(但是在状态下缓冲可能是一个挑战,这取决于你在等待来自a的真实信号时可能收到的数据量)。注意,如果b是一些队列系统(例如kafka),那么你可以将其改成一个简单的从a输入的操作符,你的操作符直接使用kafka消费者从kafka主题中提取数据。你需要保存当前的偏移量(类似于flink kafka的源码),而且你的操作符的并行性与kafka的分区数量等都有额外的复杂性。
1条答案
按热度按时间vqlkdk9b1#
flink工作在一个推的模型上,而不是拉的模型。所以你不 "从b获取数据",相反,每当数据从b到达时,你的操作符就会被调用。假设你对数据源a使用的是一个广播流,那么你可以忽略(丢弃)来自b的数据,或者缓冲它,当你得到一个真实的来自的数据时进行处理(但是在状态下缓冲可能是一个挑战,这取决于你在等待来自a的真实信号时可能收到的数据量)。
注意,如果b是一些队列系统(例如kafka),那么你可以将其改成一个简单的从a输入的操作符,你的操作符直接使用kafka消费者从kafka主题中提取数据。你需要保存当前的偏移量(类似于flink kafka的源码),而且你的操作符的并行性与kafka的分区数量等都有额外的复杂性。