1、基本概念
tm_num: taskmanager的个数。实际值为:count(taskmanager)=max{tm_num, max_used_slot/tm_slot}tm_memory: 每个tm 分配的内存,单位:MBalloc_memory: 作业申请总的内存,alloc_memory = tm_memory * tm_numused_memory: 作业使用的内存数tm_cores: 每个tm 分配的vcore数alloc_cores: 作业申请的总vcore数,alloc_cores = tm_num * tm_coresused_cores: 作业使用的vcore数tm_slot: 每个taskmanager的slot数,即每个 task manager 可以并发执行多少 taskstask_slots: 每个task最大的并发度, task_slots = tm_slot * tm_nummax_used_slot: 作业最大能利用的并发度。对于pyjstorm作业,max_used_slot = max{partition, thread_num}, 作业最大能利用的并发度, 其中,partition 指的是作业中所有topic的最大partition,thread_num 是bolt的并发,如果没有bolt,可以认为是0。task_slots >= max_used_slot 作业才能跑起来。对于原生作业,max_used_slot 为设置的parallelism最大值,如果没有设置,max_used_slot = task_slotsavailable_task_slots: 未能利用的slot,available_task_slots = task_slots - max_used_slot。未利用的slot相当于是slot占着资源在空跑,这样看着作业申请了大量资源,实际是没法进行运行task的。2、cpu 调整
cpu浪费:如果作业使用的cpu远小于分配的cpu, 可以通过调小tm_cores 或者调小tm_num,从而减小总的申请的vcore数。cpu不足:如果作业使用的cpu大于分配的cpu, 可以通过调大tm_cores 或者调大tm_num的同时加大并发,从而加大总的申请的vcore数。3、内存调整
内存浪费:如果作业使用的内存远小于分配的内存, 可以通过调小tm_memory 或者调小tm_num的同时调小并发,从而减小申请总的内存。内存不足:如果作业使用的内存接近或大于分配的内存, 可以通过调大tm_memory 或者调大tm_num的同时加大并发,从而加大申请总的内存。4、slot 调整
如果available_task_slots 实际是没有使用的slot,如果该值很大,说明资源浪费严重。请调小tm_num 或 调小tm_slot,从而减小总的task_slots,减小资源浪费。
5、作业启动优化
比如,作业的最大partition为32, thread_num = 100, 即max_used_slot = max{partition, thread_num} = 100。这时候,task_slots = 100作业就可以启动,比如tm_num = 10, tm_slot=10。但是如果想加快作业启动,可以多分配一两个tm,设置tm_num=12, tm_slot=10。这样稍微多申请一点资源是运行的。
6、优化
如何在总资源不变的情况下,优化作业资源呢:减小单个tm的资源,加大tm数。减小内存tm_memory,减小tm_cores,加大tm_num, 加大并发thread_num。保证alloc_memory 和 alloc_cores不变即可。
