实时任务资源自定义,即指实时计算Flink配置细粒度资源的专家模式 (BETA),Flink全托管引入的全新的资源配置模式,支持对作业所使用的资源进行细粒度的资源控制,以满足作业吞吐的要求。系统会自动根据您配置的资源需求,以Native K8s的模式运行作业,TM的规格和个数将会根据Slot的规格和作业并发度,由系统自动决定。本文将介绍如何在Dataphin自定义Alibaba Blink实时任务的资源。
Alibaba Blink资源自定义配置入口
在Dataphin首页,单击顶部菜单栏研发,进入数据开发页面。
在数据开发页面,按照下图操作指引,进入BLINK_SQL任务的自定义资源配置页面。
配置说明
在资源配置页面,为您展示一张拓扑图,图中每个方框代表了一个计算任务,都可以进行独立配置。每个Group代表着Group内部的节点可以存放在一台机器进行计算,可以有效避免数据的网络传播,提升性能。
系统默认为您展示系统推荐的资源配置。
配置Group执行参数
单击需要配置资源的Group右上角的后,在自定义配置Group执行参数对话框配置参数。
参数
描述
core
通常,core配置成0.25。即一个CPU可以支持4个线程同时运算,因此core的取值不能超过1。
heap_memory
单位为MB,heap_memory是堆内存,供Java应用程序使用的内存。
heap_memory及其内部各组成的大小可以通过JVM的一系列命令行参数来控制,在一般的blink程序中,都会需要一定的heap_memory开销,例如申请一定的heap_memory作为程序的缓存等,因此您可以按程序的规模来设置其大小。
parallel
表示同时并发的线程数量,您可以选择合适的数量来运行自己的任务。并不是越大越好,越大代表你资源申请的越多,反而对性能有抑制。通常,一个简单计算节点每秒可以处理2000~4000条之间的数据。
重要如果源头是tt,tt的queue大小决定了parallel的上限,不能超过这个数字,否则程序将报错。
direct_memory
单位为MB,direct_memory并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。但是这部分内存也被频繁的使用,而且也可能导致OutOfMemoryError异常出现。如果您的程序有使用igraph或者swift,可以适当配置其大小,如16-32MB。
在java NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,direct_memory可以使用Native函数库直接分配堆外内存,然后同一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一场场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。
native_memory
单位为MB,native_memory没有相应的参数来控制大小,其大小依赖于操作系统进程的最大值(对于32位系统就是3~4G,各种系统的实现并不一样),以及生成的Java字节码大小、创建的线程数量、维持Java对象的状态信息大小(用于GC)以及一些第三方的包。
native memory存放下面4种信息:
管理Java heap的状态数据(用于GC)。
JNI调用,也就是Native Stack。
JIT(即使编译器)编译时使用native memory,并且JIT的输入(Java字节码)和输出(可执行代码)也都是保存在native memory。
NIO direct buffer。
完成参数配置后,单击确定。
配置Operator执行参数
按照下图操作指引,进入自定义配置Operator执行参数对话框并配置参数。
自定义配置Operator执行参数对话框中core、heap_memory、parallel、direct_memory和native_memory参数说明,请参见配置Group执行参数,下表仅对state_size、chain_strategy参数进行说明。
参数
描述
state_size
作业执行过程中所使用的状态数据的大小,通常默认为0。
chain_strategy
chain_strategy用于定义多个节点的链接策略,Dataphin支持的链接策略包括:
Always:默认参数,即和其他节点均部署在一台机器上,没有特殊要求。
Never:节点不会和其他节点放在一台机器上,即需要独立部署。
Head:可以接受和其他节点放在一台机器上,但是只能作为Group的头节点。
重要因Head和Never极少出现,通常默认为Alway。
完成参数配置后,单击确定。