在 Google Cloud Dataflow 上的 Apache Beam 管道中保留索引映射

Persisting index map in Apache Beam pipeline on Google Cloud Dataflow

我正在设计具有以下功能的管道:

  1. 阅读来自不同 Pub/Sub 主题的事件,为我提供对象,我可以从中提取 StrId(字符串)
  2. 使用 KV(StrId, IntId> 从 Bigtable 加载映射 table,其中 IntId 是唯一整数
  3. 在该映射中查找 StrId
    • 如果找到StrId,则return对应IntId
    • 如果没有找到StrId,则依次生成一个新的IntId,添加到映射中,同时写入Bigtable
  4. 传递对象并IntId下游

我想知道状态方法是否适合我的需要,Bigtable 是否是适合使用的存储技术? StrIdIntId 之间的映射必须在所有 worker 中保留,以保持 IntIds 唯一。

此外,我们将不胜感激任何指向代码示例的链接。我知道这个 and this blog post.

(对于下游计算,我需要整数Id,所以没有办法)

这听起来很像 OpenTSDB 在其 tsdb-uid table 中管理字符串的方式。该过程需要结合使用增量(又名 ReadModifyWrite)来获取唯一 ID(即 int64 / long)和 CheckAndMutate 以确保您只有一个唯一映射。这是一个比你从 SQL 系统中得到的更困难的过程。

也就是说,Cloud Bigtable 不适合管理像 uid table 这样的小 table(即小于几 GB)。如果您使用 Cloud Bigtable 来存储大量数据,您也可以考虑将 Cloud Bigtable 用于 uid table。但是,我仍然建议还查看该功能的 SQL 替代方案。