flink更新hbase时的数据一致性问题
Data consistency problem when flink updates hbase
在类似 map 的运算符中出现了两个具有相同键的数字。第一个数字从 hbase 中通过键获取值,将它们相加并将新值通过 sink(dataStream.write(new HBaseOutputFormat(), 0L)) 放入 hbase。第二个值做同样的事情。是否有可能第二个数字在第一个数字更新到 hbase 之前从 hbase 获取值?如果我将操作符链接在一起并汇集在一起,我可以避免这个问题吗?如果没有,我该怎么办?谢谢!
您需要的是 DataStream API 中的 keyBy
函数,或者 groupBy
如果您使用数据集 API:请参阅 Flink documentation .这些函数确保一个特定的键始终由一个特定的槽处理。一个槽代表一个线程,也就是说你的两个数是顺序处理的,即使并行度大于1。
当然你必须确保对HBase的put操作是阻塞的,所以你不能使用像BufferedMutator
or Async I/O Operators.
这样的异步方式与HBase交互。
在类似 map 的运算符中出现了两个具有相同键的数字。第一个数字从 hbase 中通过键获取值,将它们相加并将新值通过 sink(dataStream.write(new HBaseOutputFormat(), 0L)) 放入 hbase。第二个值做同样的事情。是否有可能第二个数字在第一个数字更新到 hbase 之前从 hbase 获取值?如果我将操作符链接在一起并汇集在一起,我可以避免这个问题吗?如果没有,我该怎么办?谢谢!
您需要的是 DataStream API 中的 keyBy
函数,或者 groupBy
如果您使用数据集 API:请参阅 Flink documentation .这些函数确保一个特定的键始终由一个特定的槽处理。一个槽代表一个线程,也就是说你的两个数是顺序处理的,即使并行度大于1。
当然你必须确保对HBase的put操作是阻塞的,所以你不能使用像BufferedMutator
or Async I/O Operators.