本文主要翻译自官方文档中Configuration的部分:Flink1.1.3 configuration。有些配置结合工作中的相关经验。
Common Options
env.java.home : java安装路径,如果没有指定则默认使用系统的$JAVA_HOME环境变量。建议设置此值,因为之前我曾经在standalone模式中启动flink集群,报找不到JAVA_HOME的错误。config.sh中(Please specify JAVA_HOME. Either in Flink config ./conf/flink-conf.yaml or as system-wide JAVA_HOME.)
env.java.opts : 定制JVM选项,在Flink启动脚本中执行。需要单独执行JobManager和TaskManager的选项。
env.java.opts.jobmanager : 执行jobManager的JVM选项。在Yarn Client环境下此参数无效。
env.java.opts.taskmanager : 执行taskManager的JVM选项。在Yarn Client环境下此参数无效。
jobmanager.rpc.address : Jobmanager的IP地址,即master地址。默认是localhost,此参数在HA环境下或者Yarn下无效,仅在local和无HA的standalone集群中有效。
jobmanager.rpc.port : JobMamanger的端口,默认是6123。
jobmanager.heap.mb : JobManager的堆大小(单位是MB)。当长时间运行operator非常多的程序时,需要增加此值。具体设置多少只能通过测试不断调整。
taskmanager.heap.mb : 每一个TaskManager的堆大小(单位是MB),由于每个taskmanager要运行operator的各种函数(Map、Reduce、CoGroup等,包含sorting、hashing、caching),因此这个值应该尽可能的大。如果集群仅仅跑Flink的程序,建议此值等于机器的内存大小减去1、2G,剩余的1、2GB用于操作系统。如果是Yarn模式,这个值通过指定tm参数来分配给container,同样要减去操作系统可以容忍的大小(1、2GB)。
taskmanager.numberOfTaskSlots : 每个TaskManager的并行度。一个slot对应一个core,默认值是1.一个并行度对应一个线程。总的内存大小要且分给不同的线程使用。
parallelism.default : 每个operator的默认并行度。默认是1.如果程序中对operator设置了setParallelism,或者提交程序时指定了-p参数,则会覆盖此参数。如果只有一个Job运行时,此值可以设置为taskManager的数量 * 每个taskManager的slots数量。即NumTaskManagers * NumSlotsPerTaskManager 。
fs.default-scheme : 设置默认的文件系统模式。默认值是file:///即本地文件系统根目录。如果指定了hdfs://localhost:9000/,则程序中指定的文件/user/USERNAME/in.txt,即指向了hdfs://localhost:9000/user/USERNAME/in.txt。这个值仅仅当没有其他schema被指定时生效。一般hadoop中core-site.xml中都会配置fs.default.name。
fs.hdfs.hadoopconf : HDFS的配置路径。例如:/home/flink/hadoop/hadoop-2.6.0/etc/hadoop。如果配置了这个值,用户程序中就可以简写hdfs路径如:hdfs:///path/to/files。而不用写成:hdfs://address:port/path/to/files这种格式。配置此参数后,Flink就可以找到此路径下的core-site.xml和hdfs-site.xml了。建议配置此参数。
Advanced Options
Managed Memory
对于批处理程序,Flink使用了自我的内存管理,默认使用70%的taskmanager.heap.mb的内存。这样Flink批处理程序不会出现OOM问题,因为Flink自己知道有多少内存可以使用,当内存不够时,就使用磁盘空间。而且这样有些operation可以直接访问数据,
而不需要序列化数据到java对象。Flink自我管理的内存可以加速程序的执行。如果需要的话,自我管理的内存也可以在JVM堆外被分配,这也有助于提升性能。
taskmanager.memory.size :相对于jobmanager.heap.mb,使用多少内存用于内存管理器进行内存的自我管理。如果没有指定,则默认值是-1,代表参考参数taskmanager.memory.fraction。设置了自我内存管理,Flink在批处理中就可以在堆内或堆外进行排序、hash、cache等操作。
taskmanager.memory.fraction : 当taskmanager.memory.size没有设置时(或-1),此参数才生效。意思是使用taskmanager.heap.mb的百分比用于自我内存管理。默认值是0.7,代表使用70%的taskmanager的内存。剩余的30%用于UDF的堆以及用于taskmanager间通信数据的内存。
taskmanager.memory.off-heap : 默认是false。如果设置为