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交互。