我试图以流式和批量方式使用flink,将大量数据添加到Accumulo(每分钟几百万)。我想在将记录发送到Accumulo之前批量记录。我从目录或通过kafka摄取数据,使用flatmap转换数据,然后传递给RichSinkFunction,RichSinkFunction将数据添加到集合中。
使用流数据,批处理似乎没问题,因为我可以将记录添加到固定大小的集合中,一旦达到批处理阈值就会将其发送到accumulo。但是对于有限的批处理数据,我很难找到一种好的批处理方法,因为如果在指定时间内没有其他数据,则需要刷新超时。似乎没有与弹性搜索或其他替代接收器不同的Accumulo连接器。
我想过使用带有触发器的批处理大小和时间间隔的过程函数,但这需要一个键控窗口。我不想沿着键控路线走下去,因为数据看起来非常偏斜,因为有些键会有一吨记录而有些键会很少。如果我不使用窗口方法,那么我理解操作符不会是并行的。我希望懒得批处理,所以每个接收器只关心数字或时间间隔。
有没有人对如何最好地解决这个问题有任何指示?
您可以通过实施ProcessingTimeCallback
来访问接收器中的计时器。举个例子,看看BucketingSink
- 它的open和onProcessingTime方法应该让你开始。