我想从状态中读取历史。如果state为null,则读取hbase并更新状态并使用onTimer设置状态ttl。问题是如何批量读取hbase,因为从hbase读取单个记录效率不高。
通常,如果要从Flink中的外部数据库缓存/镜像状态,最高效的方法是将数据库突变流式传输到Flink中 - 换句话说,将Flink转换为数据库更改数据捕获的复制端点(CDC) )stream,如果数据库支持那个。
我没有使用hbase的经验,但https://github.com/mravi/hbase-connect-kafka是一个可能有用的例子(通过将kafka放在hbase和flink之间)。
如果您希望从Flink查询hbase,并且希望避免一次为一个用户进行点查询,那么您可以构建如下内容:
-> queryManyUsers -> keyBy(uId) ->
streamToEnrich CoProcessFunction
-> keyBy(uID) ------------------->
在这里,您将拆分流,通过窗口或流程函数或async i / o发送一个副本以批量查询hbase,并将结果发送到保存缓存并进行丰富的CoProcessFunction。
当记录直接沿着底部路径到达此CoProcessFunction时,如果必要数据在缓存中,则使用它。否则,记录被缓冲,等待来自上部路径的高速缓存数据的到达。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。