实时计算Flink版(Alibaba Cloud Realtime Compute for Apache Flink,Powered by Ververica)是阿里云基于Apache Flink构建的企业级高性能的实时大数据处理系统。Hologres与Flink深度连通,支持实时写入Flink的数据,可以实时查询写入的数据,帮助您快速搭建实时数仓。
形态说明
阿里云实时计算Flink版不进行业务存储,所有的数据均来自于外部存储系统持有的数据。阿里云实时计算Flink版支持的数据存储类型如下:
源表
源表指输入至Flink的数据输入源。Flink的源表指定为Hologres时,使用的是批量导入而非流式导入,Hologres会将全表的数据统一扫描一次后再输出至下游,扫描完成后本次作业结束。
维表
维表一般适用于点查询场景(Lookup by Key),因此在Hologres中,维表建议使用行存储,并且JOIN的字段必须是完整的主键字段。
结果表
结果表用于接收并存放经过Flink计算的结果数据,为下游数据继续消费提供各类读写接口。
阿里云实时计算Flink版还支持很多企业级高级能力,通过与Hologres深度集成,提供以下创新能力:
Hologres Binlog消费
使用消息队列的模式消费Hologres表的Change Log。
Flink Catalog
Flink支持导入Hologres元数据为Catalog,在Flink全托管控制台直接读取Hologres元数据,不用再手动注册Hologres表,可以提高开发效率且能保证表结构的正确性。
Schema Evolution
Flink全托管支持Schema Evolution,在Flink读取JSON数据时,可以自动解析类型,自动创建对应表的列,支持数据模型的动态演化。
Hologres支持的Flink产品形态及功能如下表所示。
产品形态 | 数据存储类型 | 企业级高级能力 | 描述 | ||||
源表 | 结果表 | 维表 | Hologres Binlog消费 | Flink Catalog | Schema Evolution | ||
Flink全托管 | 支持行存储及列存储,Binlog源表建议使用行存储或行列共存。 | 支持行存储及列存储 | 建议使用行存储或行列共存 | 支持 | 支持 | 支持 | 使用VVP开发平台。 |
Flink半托管 | 支持行存储及列存储,Binlog源表建议使用行存储或行列共存。 | 支持行存储及列存储 | 建议使用行存储或行列共存 | 支持 | 支持 | 支持 | 使用EMR Studio开发平台。 |
Blink独享(已停售) | 支持行存储及列存储,Binlog源表建议使用行存储或行列共存。 | 支持行存储及列存储 | 建议使用行存储或行列共存 | Hologres V0.8 只支持行存储,Hologres V0.9 及以上版本支持行存储及列存储。建议使用行存储。 | 不支持 | 不支持 | 使用Bayes开发平台。 推荐使用阿里云Flink全托管。 |
开源Flink1.10 | 不支持 | 支持行存储及列存储 | 不支持 | 不支持 | 不支持 | 不支持 | - |
开源Flink1.11及以上版本 | 不支持 | 支持行存储及列存储 | 建议使用行存储 | 不支持 | 不支持 | 不支持 | 从开源Flink1.11版本开始,Hologres代码已开源。详细内容请参见GitHub。 |
开源Flink1.13及以上版本 | 支持批量源表 | 支持行存储及列存储 | 建议使用行存储 | 不支持 | 不支持 | 不支持 | 从开源Flink1.11版本开始,Hologres代码已开源。详细内容请参见GitHub。 |
Hologres Connector Release Note
Flink版本 | 阿里云实时计算VVR版本 | Hologres版本 | 更新信息 | 相关文档 |
1.20 | 11.6 | 3.2.x 4.0.x 4.1.x | 源表:
Catalog:
通用:
| |
1.20 | 11.5 | 3.2.x 4.0.x 4.1.x | 源表:
维表:
通用:
bugfix:
| |
1.20 | 11.4 | 3.2.x 4.0.x 4.1.x | 结果表:
维表:
bugfix:
| |
1.20 | 11.3 | 3.1.x 3.2.x 4.0.x | 源表:
结果表:
通用:
bugfix:
| |
1.20 | 11.2 | 3.1.x 3.2.x 4.0.x | 结果表:
通用:
bugfix:
| |
1.20 | 11.1 | 3.1.x 3.2.x | 源表:
结果表:
维表:
通用:
| |
1.20 | 11.0 | 3.1.x 3.2.x | 通用:
源表:
| |
1.17 | 8.0.11 | 2.1.x 2.2.x 3.0.x | 源表:
结果表:
通用:
bugfix:
| |
1.17 | 8.0.9~8.0.10 | 2.1.x 2.2.x 3.0.x |
| |
1.17 | 8.0.8 | 2.1.x 2.2.x | 结果表:
| |
1.17 | 8.0.7 | 2.1.x | 维表:
通用:
| |
1.17 | 8.0.6 | 2.1.x | 源表:
Hologres Catalog:
通用:
| |
1.17 | 8.0.5 | 2.0.x 2.1.x | 源表:
结果表:
通用:
| |
1.17 | 8.0.4 | 2.0.x 2.1.x | 源表:
通用:
| |
1.17 | 8.0.3 | 2.0.x 2.1.x | 通用:
| |
1.15 | 6.0.7 |
|
| |
1.15 | 6.0.6 | 1.3.x | 源表:
| |
1.15 | 6.0.5 | 1.3.x |
| |
1.15 | 6.0.3~6.0.4 | 1.3.x | 源表:
结果表: 支持以 Fixed Copy 的模式写入,Fixed Copy 是 Hologres V1.3 新增的能力,相比通过 JDBC 模式进行写入,Fixed Copy 方式可以实现更高的吞吐(因为是流模式)、更低的数据延时和更低的客户端内存消耗(因为不攒批)。 Hologres Catalog:
sdkMode参数:Hologres不同类型的表都有多种模式可以选择,此版本开始统一整理为sdkMode参数,详情请参见Flink全托管。 | |
1.13 | 4.0.18 | 1.1及以上版本 | 修复Sink表上报Metrics影响写入性能的问题。 | |
1.13以及1.15 | 4.0.15以及6.0.2 | 1.1及以上版本 | 源表:
维表: Hologres维表支持异步请求的超时时间(asyncTimeoutMs)设置。 结果表:
| |
1.13 | 4.0.13 | 1.1及以上版本 |
| |
1.1.3 | 4.0.12 | 1.1及以上版本 |
| |
1.13 | 4.0.11 | 0.10及以上版本 | 支持CTAS、CDAS。 | |
1.13 | 4.0.8 | 0.10及以上版本 | 结果表、源表、维表支持Hologres Catalog。 | |
1.13 | 3.0.0 | 0.9及以上版本 | 支持实时消费Hologres。 | |
1.13 | 2.0.0 | 0.7及以上版本 | 支持Hologres Connector。 |
Hologres Connector相关已知缺陷和修复版本
缺陷及修复说明
影响版本会明确标注,不在范围内的没有对应缺陷。
影响版本标记为“不涉及”,表示问题可能是Hologres引擎的缺陷,而非Connector的问题。
缺陷等级说明
P0:建议立即升级,一旦触发会影响线上的使用(如查询正确性、写入成功率等操作)。
P1:推荐升级,提前规避相关问题。
P2:选择性升级,偶尔发生的问题,具备应该改写方法,或重启即可修复。
等级 | 缺陷描述 | 影响版本 | 修复版本 | 解决方法 |
P0 | 结果表写入部分列,如果未写入的字段设置了当前时间相关的默认值,如 current_timestamp、 now()等,最终填充的默认值可能不符合预期。原因是 FixedFE 模式对时间相关默认值的处理不正确。 | 11.0 ~ 11.5 | 不涉及 | 在写入时使用 Flink 侧的 now 传入结果表相应字段。或者将 |
P0 | Binlog消费时,如果物理列和元数据列存在同名列(如 | 8.0.11, 11.0~11.4 | 11.5 | 升级至11.5及以上版本,并设置 |
P1 | Binlog列裁剪可能导致Binlog消费的数据列错位。原因是holo-client在处理列裁剪时可能获取到非预期的列。 | 11.3~11.5 | 11.3~11.5均已发布hot-fix修复 | 此问题通过hot-fix修复,一般不会碰到。如果是DataStream作业,可以使用最新版本的Connector。 |
P2 | 一对多维表的Scanner在停止作业时无法正常关闭,可能导致资源泄漏或作业停止超时。原因是holo-client内部的scanner关闭逻辑存在问题。 | 11.3之前 | 11.4 | 升级至11.4及以上版本。 |
P1 | 使用check and put功能时,如果收到delete记录会抛出NPE异常,导致作业失败。 | 8.0.11~11.4 | 11.5 | 升级至11.5及以上版本。或暂时避免在有delete操作的流上使用check and put。 |
P2 | Connector从checkpoint恢复时,如果表在作业运行期间被drop并重建过,则无法从checkpoint恢复。 | 11.0~11.2 | 11.3 | 如果是测试场景,可以升级至11.3及以上版本避免此问题。需要注意的是:消费Binlog过程中,drop表会影响数据正确性,因此生产场景不建议在消费Binlog过程中重建表。 |
P1 | JDBC Binlog读取RoaringBitmap类型数据失败,抛出解析异常。 | 11.0~11.2 | 11.3 | 升级至11.3及以上版本。 |
P1 | 消费物理分区表state的LSN在shard无数据时被错误初始化为0,导致分区数据在从state恢复时丢失。 | 8.0.10之前, 11.0~11.2 | 8.0.11, 11.3 | 升级至8.0.11或11.3及以上版本。 |
P1 | 写入text数组包含null元素时抛出NPE异常,导致写入失败。 | 11.0~11.1 | 11.2 | 升级至11.2及以上版本。或确保上游数据中text数组不包含null元素。 |
P1 | 创建分区后缀与动态分区冲突,导致分区创建失败。 | 11.0~11.2 | 11.3 | 升级至11.3及以上版本。 |
P2 | 脏数据策略对非脏数据异常也会生效,导致正常的异常被错误处理(如静默丢弃)。 | 11.0~11.1 | 11.2 | 升级至11.2及以上版本。 |
P1 | 全增量一体源表:JDBC Binlog从LSN+1开始消费的问题。Checkpoint中已记录当前LSN,恢复后可能跳过一条记录。 | 8.0.10及之前 | 8.0.11 | 升级至8.0.11。 |
P2 | CTAS场景下drop column和type change同时发生时,类型归一化错误导致schema变更失败。 | 8.0.10及之前 | 8.0.11 | 升级至8.0.11。或避免同时进行drop column和type change操作。 |
P2 | 使用Catalog维表时,factory中校验Binlog参数导致误报异常。 | 8.0.10及之前 | 8.0.11 | 升级至8.0.11。 |
P2 | 多表场景下JDBC探针请求(poking request)过多导致SQL Gateway超时。 | 11.0~11.5 | 11.6 | 升级至11.6。或减少同一作业中的Hologres表数量。 |
P2 | 选择fixedfe模式时,如果表中包含fixedfe不支持的类型,不会自动降级到fe连接,导致写入或查询异常。 | 11.0~11.2 | 11.3 | 升级至11.3及以上版本。或手动指定使用fe连接模式。 |
P1 | JDBC模式消费Binlog,出现Binlog Convert Failed异常,或者部分shard的数据读取停止在某个时刻。原因是Hologres实例的Gateway收到后端超时的异常信息时,将异常返回给客户端的过程中会存在问题,导致读取数据卡住或数据解析失败报错。 | 不涉及 | 不涉及 | 一般在作业反压时会更容易出现,如果作业存在数据读取卡住的问题,可以选择重启作业并从最近的checkpoint恢复。 要彻底解决该问题,需要将Hologres版本升级到2.2.21及以上版本。 |
P2 | 作业上线慢或者超时,查看Thread Dump卡在 GetTableSchema处。 | 不涉及 | 不涉及 | 可能存在多种情况,可以根据以下步骤依次排查:
|
P0 | 通过FixedFE(对应connector中的jdbc_fixed模式)写入Hologres的 Text,Json或Jsonb类型时,如果数据源有不合法的字符,可能抛出预期外的异常,进一步导致当前连接所在FE节点重启,当前FE的连接中断。 | 不涉及 | 不涉及 | 如果无法保证上游字符串的合法性,建议使用jdbc模式写入,并且为结果表开启
或者将Hologres版本升级至3.0及以上版本,以继续使用jdbc_fixed模式。 |
P1 | 在进行JDBC维表一对多join时,Flink Task出现内存使用过高或者OOM 的情况。 | 不涉及 | 不涉及 | Hologres V1.3,使用 要彻底解决该问题,需要升级 Hologres 实例版本至 Hologres V2.0 及以上版本。 |
P1 | Binlog作业有状态恢复时,抛出 | 8.0.4 | 8.0.9 | 从8.0.9版本开始,不再强制检查table id,而是仅输出WARN级别日志,以允许作业从最新状态恢复。但仍然不推荐在binlog表作业运行时进行重建表操作。对binlog来说,这类操作会导致之前的binlog完全丢失。 |
P2 | 作业运行过程中发生反压,查看ThreadDump发现Execution Pool卡在close或者start方法。原因是共享连接池多个client复用同一个连接池时,可能存在死锁,导致连接池无法正常关闭。 | 8.0.5 | 8.0.9 | 建议升级版本。 |
P2 | 如果对源表进行了 | 8.0.6及之前版本 | 8.0.7 | 建议升级或者指定起始时间进行增量消费。 |
P1 | 维表字段数量较多时,作业上线超时。 | 8.0.6 | 8.0.7 | 建议升级版本。 |
P0 | 当在批量源表中开启 说明 全增量和Binlog源表不存在此问题。 | 8.0.5及之前版本 | 8.0.6 | 建议升级版本。 |
P0 | 通过FixedFE(对应Connector中的 | 8.0.5及之前版本 | 暂无 | 如果无法保证上游JSON或JSONB字符串的合法性,建议使用JDBC模式写入。 |
P1 | JDBC维表一对多Join时,内部出现的连接失败等异常无法抛出,表现为异步Join节点反压且数据不再流动,发生概率较小。 | 6.0.7及之前版本 | 8.0.3 | 建议升级版本,也可以通过重启作业暂时恢复。 |
P1 | 通过JDBC模式消费Binlog时,存在内存泄漏问题。可能的表现为作业启动时消费速率较高,之后持续下降。 | 6.0.7及之前版本 | 6.0.7 | 建议升级版本,对于DataStream作业,需要使用6.0.7-1版本的依赖。 |
P0 | JDBC模式写入的定时Flush(由jdbcWriteFlushInterval参数控制)捕获的异常在下条数据写入时才会抛出,当用户写入流量较小时,异常被捕获还未抛出期间有可能进行成功的checkpoint。下次失败时会从这个不合理成功的checkpoint恢复,从而可能出现丢数据的情况。 | 6.0.6及之前版本 | 6.0.7 | 流量较小时容易出发此缺陷,建议升级版本,或者调整jdbcWriteFlushInterval时间大于checkpoint的间隔时间。 |
P2 | JDBC模式消费Binlog不设置Slotname时,系统会自动创建一个Slotname。若当表名含有特殊字符或Schema名称时,自动创建非法Slotname,无法使用,且作业将会抛出syntax error异常。 | 6.0.6 | 6.0.7 | 建议升级版本,对于DataStream作业,需要使用6.0.7-1版本的依赖。 |
P1 | 用户作业中不同的Hologres实例或数据库使用相同的 | 6.0.6及之前版本 | 6.0.7 | 同一个作业使用的Hologres实例或者数据库不同时,使用不同的 |
P1 | 维表字符串类型有 | 6.0.6 | 6.0.7 | 建议升级版本。 |
P0 | Hologres源表默认开启Filter下推,但如果作业也使用了Hologres维表,且写入的DML中包含对维表非主键字段的过滤条件时,维表的Filter也会被错误地下推,可能导致维表Join出现错误结果。 | 6.0.3~6.0.5 | 6.0.6 | 建议升级版本。 |
P0 | 多个结果表的 | 6.0.2及之前版本 | 6.0.3 | 将全部结果表的 |
P1 | Binlog源表DDL中声明 | 6.0.2 | 6.0.3 | 不使用所述字段,或者升级版本。 |
P1 | 汇报Metrics会影响结果表的写入性能,排查表现为Sink节点的 | 4.0.15~4.0.17 | 4.0.18 | 选择没有受影响的版本。 |
P2 | 批量源表读取字符或字符数组类型,其中比较特殊字符时,解析字符串失败。 | 4.0.14及之前版本 | 4.0.15 | 清理源表中的脏数据,或者升级版本。 |
P2 | 全增量一体化源表DDL中声明 | 4.0.13 | 4.0.14 | 不使用全增量功能,或者升级版本。 |