flink-如何使用状态作为缓存

时间:2018-08-27 07:43:27

标签: apache-flink

我想从状态中读取历史记录。如果state为null,则读取hbase并更新状态,并使用onTimer设置状态ttl。问题是如何批量读取hbase,因为从hbase读取单个记录效率不高。

1 个答案:

答案 0 :(得分:0)

通常,如果要从Flink中的外部数据库缓存/镜像状态,最有效的方法是将数据库突变流式传输到Flink中,换句话说,将Flink转换为数据库更改数据的复制端点捕获(CDC)流,如果数据库支持的话。

我没有使用hbase的经验,但是https://github.com/mravi/hbase-connect-kafka是一个可能起作用的示例(通过将kafka置于hbase和flink之间)。

如果您希望从Flink查询hbase,并希望避免一次对一个用户进行点查询,那么您可以构建如下内容:

              -> queryManyUsers -> keyBy(uId) -> 
streamToEnrich                                 CoProcessFunction
              -> keyBy(uID) ------------------->

在这里,您将分割流,通过诸如窗口或流程功能之类的东西或异步I / O发送一个副本以批量查询hbase,然后将结果发送到保存缓存并进行扩充的CoProcessFunction中。

当记录沿着底部路径直接到达此CoProcessFunction中时,如果必要的数据在高速缓存中,则将使用它。否则,记录将被缓冲,以等待高速缓存中的数据从较高路径到达。

相关问题