Flink批处理接收器

问题描述 投票:0回答:1

我试图以流式和批量方式使用flink,将大量数据添加到Accumulo(每分钟几百万)。我想在将记录发送到Accumulo之前批量记录。我从目录或通过kafka摄取数据,使用flatmap转换数据,然后传递给RichSinkFunction,RichSinkFunction将数据添加到集合中。

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

我想过使用带有触发器的批处理大小和时间间隔的过程函数,但这需要一个键控窗口。我不想沿着键控路线走下去,因为数据看起来非常偏斜,因为有些键会有一吨记录而有些键会很少。如果我不使用窗口方法,那么我理解操作符不会是并行的。我希望懒得批处理,所以每个接收器只关心数字或时间间隔。

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

batch-processing apache-flink flink-streaming accumulo
1个回答
0
投票

您可以通过实施ProcessingTimeCallback来访问接收器中的计时器。举个例子,看看BucketingSink - 它的openonProcessingTime方法应该让你开始。

© www.soinside.com 2019 - 2024. All rights reserved.