Flink分批水槽

时间:2018-09-06 12:33:18

标签: batch-processing apache-flink flink-streaming accumulo

我正在尝试以流方式和批处理方式使用flink,以将大量数据添加到Accumulo中(每分钟数百万)。我想先对记录进行批处理,然后再将其发送到Accumulo。 我从目录或通过kafka提取数据,使用平面图转换数据,然后传递给RichSinkFunction,后者将数据添加到集合中。

使用流数据,批处理似乎还可以,因为我可以将记录添加到固定大小的集合中,一旦达到批处理阈值,该记录就被发送到累加器中。但是对于有限的批处理数据,我正在努力寻找一种好的批处理方法,因为如果在指定时间内没有其他数据,则需要刷新超时。 与Elastic搜索或其他替代接收器不同,似乎没有Accumulo连接器。

我考虑过使用带触发器的批处理大小和时间间隔的过程功能,但这需要一个键控窗口。我不想沿着键控路线走下去,因为数据看起来非常不对称,因为有些键会有大量记录,而有些则很少。如果我不使用窗口化方法,那么我知道运算符将不会并行。我希望懒散地进行批处理,因此每个接收器仅关心数字或时间间隔。

有人对如何最好地解决这个问题有任何指示吗?

1 个答案:

答案 0 :(得分:0)

您可以通过实现ProcessingTimeCallback来访问接收器中的计时器。例如,看看BucketingSink -它的openonProcessingTime方法应该可以帮助您入门。