上下游组件扩缩容与增减分区对作业的影响及操作建议

在使用实时计算 Flink 版时,如果上下游组件发生变配操作 (如增减分区、配置升级、节点扩缩容等,但不包括版本升级或集群迁移等操作),对于已运行中的作业,不同连接器的响应行为、注意事项以及操作建议。

连接器行为与操作建议

说明

Flink 的 Failover 是指当 Flink 作业运行过程中发生故障(如任务失败、节点宕机等)时,系统自动恢复作业的能力。Failover 的目标是确保作业能够在发生故障后继续运行,并尽可能保证数据处理的正确性和一致性。

连接器

连接器响应行为与注意事项

操作建议

写入是否依赖Checkpoint

消息队列Kafka

Kafka分区增加后,Flink也会动态捕捉到分区变动。但是如果并发度与分区数不是倍数关系,可能导致分区分配不均。

先增加Kafka分区再合理调整并发度与分区保持倍数关系,保证分区消费均匀分配。例如分区数由3增加到8,可以调整并发度为4或者8。

exactly once

语义依赖

Upsert Kafka

实时数仓Hologres

扩缩容或重启实例的过程中,会出现无法连接的情况,重试一定次数后,超时则会Failover,直到实例重启成功。

当前的Hologres源表根据tablename读取,建议无状态重启作业,不要复用原来作业状态启动。

不依赖

日志服务SLS

  • VVR 8.0.8及以下版本:作业会通过Failover适配分区变化。

  • VVR 8.0.9及以上版本:可配置enableNewSourcetrue,作业不会Failover,可以配合shardDiscoveryIntervalMs设置动态检测分区变化的时间间隔。

作业会在Failover后适配分区变化。可以调整分区后,手动重启避免作业Failover。

不依赖

MySQL

如果扩缩容或重启实例导致数据库连接不可用,Flink 的 Failover 机制会检测到连接异常并触发任务重启。

在此过程中,如果数据库的链接地址没有发生变化且服务仍然可用,连接器会通过其内置的重连机制尝试重新建立连接,最终使任务成功恢复运行。

说明

工作原理

当连接器遇到外部系统故障时,首先尝试多次重试。如果重试成功,则任务继续正常运行,不会触发 Failover。

如果连接器的重试机制未能解决问题(如外部系统长时间不可用),则连接器会抛出异常,导致任务失败。此时,Flink 的 Failover 机制会被触发,按照配置的策略进行任务恢复。

Failover 机制会在任务恢复后重新调度任务,连接器也会再次尝试与外部系统建立连接。

扩缩容时应注意评估作业重启带来的影响。

  • 链接地址发生变化

    需要修改作业对应参数,重新部署启动。

  • 链接地址没有变化

    无需重启作业。

说明

如果是主从切换或集群需要重启的情况,可能会造成短暂的连接中断。如果该行为持续时间较长,会触发Failover。如果不想触发Failover,可以先停止作业,等待变配完成后再重启作业。

不依赖

云数据库RDS MySQL

不依赖

JDBC

不依赖

云原生数据仓库AnalyticDB PostgreSQL

不依赖

云原生据仓库 ADB MySQL版 3.0

不依赖

时序数据库InfluxDB

不依赖

OceanBase(公测中)

不依赖

PolarDB PostgreSQL

不依赖

云原生多模数据库Lindorm

不依赖

云数据库HBase

不依赖

Postgres CDC(公测中)

/

Elasticsearch

依赖

StarRocks

exactly once

语义依赖

大数据计算服务MaxCompute

降低配置时,如果配置的资源不足以支持当前作业以设定的并发度上传数据时,会导致一些子任务报错重试,直到有空闲的资源。

根据之前的业务流量进行评估来进行降配;或先降低作业的并发度后进行降配。

Batch Tunnel

模式依赖

数据总线DataHub

暂不支持自动检查分区变化。

手动重启作业,以适应分区变化。

不依赖

云数据库Tair(Redis开源版)

支持加减分片的无感扩缩容。调整实例规格后会导致短暂闪断,尝试重连多次失败后会导致Failover。

  • 集群模式:集群支持加减分片的无感扩缩容。

  • 主从模式:执行变配操作(如调整实例规格)可能导致短暂闪断,Flink 会尝试重连;若多次重连失败,则触发 Failover。为避免 Failover并实现快速适配,建议在变配完成后手动重启作业。

不依赖

云数据库Tair(Tair企业版)

不依赖

ClickHouse

如果shardWrite设置为false,不需要重启作业。

如果设置为true,则根据inferLocalTable参数值来修改。

inferLocalTable参数值:

  • false(默认值):重新修改url参数,添加新节点后重启作业。

  • true:重新手动启动作业,将自动推测本地表的节点。

不依赖

云消息队列 RocketMQ 版

  • RocketMQ 4.x:

    作业会通过 Failover 适配分区变化。

  • RocketMQ 5.x:

    • VVR 8.0.6及以下:需要手动重启作业以适配分区变化。

    • VVR 8.0.7及以上:支持自动适配分区变化。

自动适配可能导致数据重复消费,建议在分区变更前停止作业,并在变更后从Checkpoint启动以避免问题。

依赖

表格存储Tablestore(OTS)

一段时间内连接器没有数据,且buffer中也无数据发送,则需要依赖Checkpoint写入

/

依赖

SelectDB(公测中)

扩缩容不影响写入。

/

不依赖

MongoDB

作业读取阶段,如果拓扑改变会造成134 - ReadConcernMajorityNotAvailableYet 错误,属于不可重试错误。

如果需要升降配,主节点切换或分片集群中分片的增减等拓扑变化,请停止作业,等待集群稳定后重启作业。

依赖

对象存储OSS

通过维护独立的元数据层来描述数据的结构和状态,不涉及增减分区和节点扩缩容的操作。

/

依赖

Iceberg

/

依赖

流式数据湖仓Paimon

/

依赖

Hudi(退役中)

/

依赖

Print

测试使用。

/

/

Blackhole

/

/

Datagen

/

/

模拟数据生成Faker

/

/