在企业用户使用Dataphin的实时研发模块时,有两个基本问题是必须考虑的:
- 短期上线一个实时业务,需要准备多少资源?企业在未来一年中,需要提前准备多少服务器/云资源?
- 上线实时任务时,怎么配置需要的资源?
本文对这两个问题做简单介绍,期望企业用户能够快速理解资源预估原理和资源配置方法。
Flink 引擎基本概念
Dataphin实时研发对接Flink引擎,在不同环境下引擎版本、内核不同,但是都有相同的基本概念。在了解Dataphin实时研发任务资源预估和配置前,需要企业用户的运维部门同事对Flink的这些概念有基本了解:
配置项 |
说明 |
CU |
CU对应实时计算底层系统的CPU计算能力。1 CU=1核CPU+4 GiB内存 |
JobManager CPU/Memory |
建议您配置为1 Core和4 GiB。根据Flink最佳实践,单个JM资源需要至少配置为0.25 Core和1 GiB,才能保证作业稳定运行。 |
TaskManager CPU/Memory |
建议您配置为1 Core和4 GiB。根据Flink最佳实践,单个TM内存资源需要至少配置为0.25 Core和1 GiB,才能保证作业稳定运行。单个TM资源,建议不高于16Core/64GiB |
并发度 |
作业全局并发数。根据Flink最佳实践,并发度可以设置为等于集群节点可用CPU的核心数量。 |
TaskManager 数量 |
请填入整数。 |
从上表的说明,可以看出有两个明显的约束:
- 集群总体资源约束: TaskManager数量 * TaskManager Memory < = 集群总的内存可用资源
- 单个TaskManager资源约束: [设置的并发数/TaskManager 数量] <=单个TaskManager CPU Core
Dataphin实时研发资源预估
一个Dataphin实时研发作业(Job)的CU使用量取决于此Job输入数据流的QPS、计算复杂程度,以及具体的输入数据分布情况。您可以根据业务规模以及实时计算的计算能力,估算所需购买的资源数量。
实时研发 1 CU的处理能力如下表所示:
处理场景 |
处理能力 |
简单的流式计算处理 例如,过滤、清洗等操作。 |
1 CU每秒可以处理5000条数据。 |
复杂的流式计算处理 例如,聚合操作、复杂UDF计算等。 |
1 CU每秒可以处理1000条数据。 |
上述计算能力估值仅限于实时计算内部处理能力,不包括对外数据读取和写入部分。外部数据的读写效率会影响您对实时计算能力的评估。
举例:
客户的输入数据流的QPS是12000,并且期间做了比较复杂的聚合,按照上面的文档:
TaskManager的CU数量:12000/1000 = 12 可以设置TaskManager数量为3,每个为 4Core/16GiB
JobManager的CU数量:2
该任务总共的资源消耗:2+12=12 CU= 14 Core + 56 GiB 这个就是运维部门需要准备预留的资源总量。
Dataphin实时研发资源配置
开源Flink模式:
当使用的是开源Flnk计算源时,Dataphin对任务的资源配置做了简化,如下图:
在预估了资源总量后,Dataphin中可以配置TaskManager的数量和Memory、Job Manager的Memory,另外可以配置并发度。
如果是使用Yarn集群,这块资源是需要在Yarn集群中预留的资源;如果是使用K8s集群,这块资源在 Dataphin的资源调度集群中预留。
VVP模式:
当使用的是VVP计算源时,Dataphin对任务的资源配置做了进一步的简化和细化,如下图:
在配置Job Manager的CPU和Memory后,用户可以选择资源配置类型为 “系统推荐配置”和“自定义配置”。初级用户可以直接按系统推荐配置操作;对Flink引擎的内存模型非常熟悉的企业用户,可以按自定义配置来做细粒度的内存使用控制。