如何在apache flink中有条件地处理流数据?

bis0qfac  于 2021-03-24  发布在  Flink
关注(0)|答案(1)|浏览(620)

我使用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工作编码?

vqlkdk9b

vqlkdk9b1#

flink工作在一个推的模型上,而不是拉的模型。所以你不 "从b获取数据",相反,每当数据从b到达时,你的操作符就会被调用。假设你对数据源a使用的是一个广播流,那么你可以忽略(丢弃)来自b的数据,或者缓冲它,当你得到一个真实的来自的数据时进行处理(但是在状态下缓冲可能是一个挑战,这取决于你在等待来自a的真实信号时可能收到的数据量)。
注意,如果b是一些队列系统(例如kafka),那么你可以将其改成一个简单的从a输入的操作符,你的操作符直接使用kafka消费者从kafka主题中提取数据。你需要保存当前的偏移量(类似于flink kafka的源码),而且你的操作符的并行性与kafka的分区数量等都有额外的复杂性。

相关问题