我正在尝试以流方式和批处理方式使用flink,以将大量数据添加到Accumulo中(每分钟数百万)。我想先对记录进行批处理,然后再将其发送到Accumulo。 我从目录或通过kafka提取数据,使用平面图转换数据,然后传递给RichSinkFunction,后者将数据添加到集合中。
使用流数据,批处理似乎还可以,因为我可以将记录添加到固定大小的集合中,一旦达到批处理阈值,该记录就被发送到累加器中。但是对于有限的批处理数据,我正在努力寻找一种好的批处理方法,因为如果在指定时间内没有其他数据,则需要刷新超时。 与Elastic搜索或其他替代接收器不同,似乎没有Accumulo连接器。
我考虑过使用带触发器的批处理大小和时间间隔的过程功能,但这需要一个键控窗口。我不想沿着键控路线走下去,因为数据看起来非常不对称,因为有些键会有大量记录,而有些则很少。如果我不使用窗口化方法,那么我知道运算符将不会并行。我希望懒散地进行批处理,因此每个接收器仅关心数字或时间间隔。
有人对如何最好地解决这个问题有任何指示吗?
答案 0 :(得分:0)
您可以通过实现ProcessingTimeCallback
来访问接收器中的计时器。例如,看看BucketingSink
-它的open和onProcessingTime方法应该可以帮助您入门。