首页 > 解决方案 > flink sink 失败时,sink 中的缓冲区会丢失吗?

问题描述

我正在使用flink处理大量数据并添加到HBase中。为了提高sink到hbase的速度,我在flink sink操作上缓冲了一些数据。当达到批处理阈值时,数据将发送到HBase。

但是如果在达到批处理阈值之前sink操作失败,缓冲区上的数据会丢失吗?如果我将数据逐个发送到HBase,速度似乎太慢了。

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

标签: hbaseapache-flinksink

解决方案


当 sink 任务失败时,缓冲区中的数据将丢失。

如果不使用检查点,则无法挽救这种情况。

通过使用 checkpoint,您可以从 checkpoint 重新启动程序,数据将再次以 at-least-once 的语义发送到 HBase。要实现完全一次的语义,您可以尝试实现 CheckpointListener 并在检查点完成时提交缓冲区。


推荐阅读