Apache Phoenix 流的变更数据捕获

主要观点:Apache Phoenix 是基于Apache HBase的开源 SQL 接口,可通过标准 SQL 查询对海量数据进行快速 OLTP 操作,能结合 NoSQL 的可扩展性与 SQL 的熟悉性和强大功能。它提供了Change Data Capture(CDC)功能,通过PHOENIX-7001实现,CDC 利用写优化的未覆盖索引和最大回溯功能,按行级修改的时间顺序捕获更改。

关键信息

  • 由于 CDC 使用PHOENIX_ROW_TIMESTAMP()上的未覆盖索引,CDC 使用者需提供从 CDC 索引读取记录的时间范围。
  • 解决方案引入了 Phoenix CDC 的流概念,为启用 CDC 的表提供一个活动流,包括变更流(捕获行级修改的时间顺序序列并存储在日志中)和流分区(将记录组织为组或分区)。
  • 创建 Phoenix 表的 CDC 时会创建一个未覆盖索引,PARTITION_ID()用于获取 HBase 中数据修改的编码区域名,PHOENIX_ROW_TIMESTAMP()用于获取行更新时间戳。
  • 索引的分区分为开放分区(对应活动的数据表区域)和关闭分区(对应已归档或已拆分/合并的区域),两者均可包含记录,且可通过时间戳值PHOENIX_ROW_TIMESTAMP()标识分区记录。
  • 与给定流的所有开放和关闭分区相关的元数据存储在新的系统表SYSTEM.CDC_STREAMSYSTEM.CDC_STREAM_STATUS中。
  • 消费者消费流记录需遵循一系列步骤,包括获取流名称、获取分区信息以及从给定分区消费记录等。

重要细节

  • HBase 会根据区域大小增长等策略进行区域拆分,默认区域大小不超过 10GB。
  • 分区记录在 CDC 流索引表的 TTL 过期后将不可用。
  • 在区域拆分时,父区域会被归档,新的子区域开始接收新的修改。
  • SYSTEM.CDC_STREAM_STATUS表跟踪启用 CDC 的表的 CDC 流状态,SYSTEM.CDC_STREAM表存储 CDC 流的分区元数据。
  • 消费者可通过LIMITOFFSET对给定分区的变更流记录进行分页。
阅读 3
0 条评论