【Flink1.9-配置篇】

	flink作为产品化极高的流处理引擎,提供了开箱即用的默认配置。
	首先,flink的启动java环境变量默认为当前用户的JAVA_HOME,如果想要指定环境变量可以在配置文件conf/flink-conf.yaml中添加配置env.java.home。
	本文中所有内容列出的所有配置项都可以直接在conf/flink-conf.yaml中添加,并重启flink生效,当然添加的时候要符合yaml语法规范[参考](http://www.yaml.org/spec/1.2/spec.html)

常用配置

配置项 默认值 说明
jobmanager.heap.size 1024m 默认值为1G大小的jm堆内存空间
taskmanager.heap.size 1024m 默认值为1G大小的tm堆内存空间,当使用yarn模式启动的时候,这个值会被自动设置为申请到yarn上跑task manager容器的大小减去一定的容错大小,所以实际运行在container中的tm的heap size会比实际申请的小,container内真正能够使用的jvm heap size大约为申请资源的9/10
parallelism.default 1 默认的任务并行度
taskmanager.numberOfTaskSlots 1 每一个tm进程上可以运行的平行算子或者用户功能的所有实例数量,如果大于1,那么可以运行多个算子或者功能的实例,这样的话单个tm可以利用起多个cpu core,但是在同一时间,内存也被不同的算子实例平均分配。这个配置是典型的同tm所在机器的cpu核数百分比成对应关系的,如果只有一个tm一台服务器,建议配置为跟cpu core一致,或者是cpu core数量的一半
state.backend 后台状态的模式,该参数决定了何种后端状态管理方式来存储状态以及进行checkpoint
state.checkpoints.dir 在flink支持的文件系统里,用来存储元数据信息和数据文件的目录,必须要是所有参与的tm以及jm都能够达到的地方
state.savepoints.dir 全局的用来做savepoint的目录,被三种后端状态用来写savepoint到文件系统中
high-availability 用来定义高可用集群,没啥好说的,zookeeper
high-availability.storageDir 高可用的状态存储目录,一般设置为hdfs上一个地址,激活状态的jm会把状态同步到hdfs或者其他文件系统中共享
security.ssl.internal.enabled false 是否启用内部通讯ssl安全加密
security.ssl.rest.enabled false 是否在rest 接口上启用ssl传输

全部参考配置

HDFS

以下参数官方建议使用环境变量HADOOP_CONF_DIR替代

以下参数是由flink封装的hdfs参数

配置项 默认值 说明
fs.hdfs.hadoopconf hadoop的配置目录绝对路径,该参数作为可选参数,flink会根据该参数找下边的hadoop配置文件,进而知道hdfs的namenode ip和port,建议使用高质量的URIs 比如 hdfs://address:port/path/to/files. 如果需要对写入hdfs中的块大小block size或者副本数量replication factor,flink会去找这个目录下的“core-site.xml” and “hdfs-site.xml”文件
fs.hdfs.hdfsdefault hdfs-site.xml的绝对路径
fs.hdfs.hdfssite hdfs-site.xml的绝对路径

核心配置

配置项 默认值 说明
classloader.parent-first-patterns.additional (以分号分隔)的模式列表,该模式指定应始终首先通过父ClassLoader解析哪些类。模式是一个简单的前缀,将根据完全限定的类名进行检查。这些模式被附加到“ classloader.parent-first-patterns.default”。
classloader.parent-first-patterns.default “java.;scala.;org.apache.flink.;com.esotericsoftware.kryo;org.apache.hadoop.;javax.annotation.;org.slf4j;org.apache.log4j;org.apache.logging;org.apache.commons.logging;ch.qos.logback” (以分号分隔)的模式列表,该模式指定应始终首先通过父ClassLoader解析哪些类。模式是一个简单的前缀,将根据完全限定的类名进行检查。通常不应修改此设置。要添加其他模式,我们建议改用“ classloader.parent-first-patterns.additional”
classloader.resolve-order “child-first” 在从用户代码加载类时定义类解析策略,即是先检查用户代码jar(“子优先”)还是应用程序类路径(“父优先”)。默认设置指示首先从用户代码jar加载类,这意味着用户代码jar可以包含和加载与Flink所使用的(依赖)不同的依赖关系。
io.tmp.dirs ‘LOCAL_DIRS’ on Yarn. ‘_FLINK_TMP_DIR’ on Mesos. System.getProperty(“java.io.tmpdir”) in standalone. 临时文件的存储目录,用逗号、竖线分割
parallelism.default 1 默认的job并行度

JobManager

配置项 默认值 说明
jobmanager.archive.fs.dir jm历史已完成任务归档的目录
jobmanager.execution.attempts-history-size 16
jobmanager.execution.failover-strategy full 此选项指定作业计算如何从任务失败中恢复。可接受的值为:‘full’:重新启动所有任务以恢复作业。“区域”:重新启动可能受任务故障影响的所有任务。更多详细信息可以在这里找到
jobmanager.heap.size “1024m” jm的jvm heap size
jobmanager.rpc.address none config参数,用于定义要与作业管理器进行通信的网络地址。仅在存在具有静态名称或地址的单个JobManager的设置(简单的独立设置或具有动态服务名称解析的容器设置)中,才解释该值。当使用领导者选择服务(如ZooKeeper)从潜在的多个备用JobManager中选择和发现JobManager领导者时,它在许多高可用性设置中并不使用。
jobmanager.rpc.port 6123 config参数,用于定义要与作业管理器进行通信的网络端口。与jobmanager.rpc.address一样,此值仅在存在单个具有静态名称/地址和端口的JobManager的设置(简单的独立设置或具有动态服务名称解析的容器设置)中进行解释。当使用领导者选举服务(例如ZooKeeper)来从潜在的多个备用JobManager中选举和发现JobManager领导者时,在许多高可用性设置中不使用此配置选项。
jobstore.cache-size 52428800 作业存储高速缓存大小(以字节为单位),用于将完成的作业保留在内存中。
jobstore.expiration-time 3600 完成的作业到期并从作业存储中清除之后的时间(以秒为单位)。
slot.idle.timeout 50000 插槽池中空闲插槽的超时时间(以毫秒为单位)
slot.request.timeout 300000 从插槽池请求插槽的超时时间(以毫秒为单位)。

TaskManager

配置项 默认值 说明
task.cancellation.interval 30000 两次连续的任务取消尝试之间的时间间隔(以毫秒为单位)。
task.cancellation.timeout 180000 超时(毫秒),之后任务取消超时并导致致命的TaskManager错误。值为0将禁用看门狗。
task.cancellation.timers.timeout 7500
当流任务被取消时,我们等待计时器的时间(以毫秒为单位)完成所有待处理的计时器线程。
task.checkpoint.alignment.max-size -1 检查点对齐可以缓冲的最大字节数。如果检查点对齐缓冲的数据量大于配置的数据量,则检查点将中止(跳过)。值-1表示没有限制。
taskmanager.debug.memory.log false 指示是否启动线程的标志,该线程重复记录JVM的内存使用情况。
taskmanager.debug.memory.log-interval 5000 日志线程记录当前内存使用情况的时间间隔(以毫秒为单位)。
taskmanager.exit-on-fatal-akka-error false 是否应启动任务管理器的隔离监控器。如果隔离监视程序检测到它已经隔离了另一个角色系统,或者已被另一个角色系统隔离,则隔离器将关闭该角色系统。
taskmanager.heap.size 1024m TaskManager的JVM堆大小,它们是系统的并行工作器。在YARN设置上,此值会自动配置为TaskManager的YARN容器的大小减去某个公差值。
taskmanager.host none TaskManager绑定到的网络接口的地址。此选项可用于显式定义绑定地址。因为不同的TaskManager对此选项需要不同的值,所以通常在其他非共享TaskManager特定的配置文件中指定它
taskmanager.jvm-exit-on-oom false 当任务线程抛出OutOfMemoryError时是否杀死TaskManager。
taskmanager.network.bind-policy ‘ip’ 如果未设置“ taskmanager.host”,则TaskManager使用的自动地址绑定策略。该值应为以下之一:“名称”-使用主机名作为绑定地址“ ip”-使用主机的IP地址作为绑定地址
taskmanager.numberOfTaskSlots 1 单个TaskManager可以运行的并行运算符或用户功能实例的数量。如果此值大于1,则单个TaskManager会使用一个函数或运算符的多个实例。这样,TaskManager可以利用多个CPU内核,但是同时,可用内存在不同的运算符或函数实例之间分配。该值通常与TaskManager的计算机具有的物理CPU内核数成比例(例如,等于内核数或内核数的一半)。
taskmanager.registration.initial-backoff 500ms 两次连续注册尝试之间的初始注册退避。对于每次新的注册尝试,补偿都会加倍,直到达到最大注册补偿。
taskmanager.registration.max-backoff 30s 两次连续注册尝试之间的最大注册退避。最大注册回退需要时间单位说明符(ms / s / min / h / d)。
taskmanager.registration.refused-backoff 10s 在重试连接之前,作业经理拒绝了注册后的退还。
taskmanager.registration.timeout 5m 定义TaskManager注册的超时。如果超过时长而没有成功注册,则TaskManager终止。
taskmanager.rpc.port 0 任务管理器的IPC端口。接受端口列表(“ 50100,50101”),范围(“ 50100-50200”)或两者的组合。建议设置一定范围的端口,以避免在同一台计算机上运行多个TaskManager时发生冲突。

内存调优参考
下边的表格说明如何管理内存

配置项 默认值 说明
taskmanager.memory.fraction 0.7 任务管理器为排序,哈希表和中间结果的缓存保留的相对内存量(减去网络缓冲区使用的内存量)。例如,值为0.8表示任务管理器将其80%的内存(取决于taskmanager.memory.off-heap)保留80%的内存用于内部数据缓冲区,而将20%的可用内存留给任务用户定义函数创建的对象的管理器堆。如果未设置taskmanager.memory.size,则仅评估此参数。
taskmanager.memory.off-heap false 内存分配方法(JVM堆或堆外),用于TaskManager的托管内存。对于内存量较大的设置,这可以提高在内存上执行的操作的效率。设置为true时,建议taskmanager.memory.preallocate也设置为true。
taskmanager.memory.preallocate false 启动TaskManager时是否应预先分配TaskManager受管内存。当taskmanager.memory.off-heap设置为true时,建议此配置也设置为true。如果将此配置设置为false,则只有在通过触发完整的GC达到配置的JVM参数MaxDirectMemorySize时,才会清理分配的堆外内存。对于流设置,强烈建议将此值设置为false,因为核心状态后端当前不使用托管内存。
taskmanager.memory.segment-size “32kb” 网络堆栈和内存管理器使用的内存缓冲区的大小。
taskmanager.memory.size 0 任务管理器为进行排序,哈希表和中间结果的缓存而保留在堆上或堆外(取决于taskmanager.memory.off-heap)的内存量(以兆字节为单位)。如果未指定,则内存管理器将按照taskmanager.memory.fraction指定的相对于任务管理器JVM大小的固定比率。

Distributed Coordination

配置项 默认值 说明
cluster.evenly-spread-out-slots false 启用插槽扩展分配策略。该策略尝试在所有可用TaskExecutor中平均分配插槽。
cluster.registration.error-delay 10000 尝试注册后进行的暂停导致异常(超时除外),以毫秒为单位。
cluster.registration.initial-timeout 100 群集组件之间的初始注册超时(以毫秒为单位)。
cluster.registration.max-timeout 30000 群集组件之间的最大注册超时(以毫秒为单位)。
cluster.registration.refused-registration-delay 30000 尝试注册后的暂停时间(以毫秒为单位)被拒绝。
cluster.services.shutdown-timeout 30000 群集服务(例如执行程序)的关闭超时(以毫秒为单位)。

Distributed Coordination (via Akka)

配置项 默认值 说明
akka.ask.timeout 10s 用于所有期货并阻止Akka呼叫的超时。如果Flink由于超时而失败,则应尝试增加此值。超时可能是由于计算机运行缓慢或网络拥塞引起的。超时值需要一个时间单位说明符(ms / s / min / h / d)。
akka.ask.timeout 10s 用于所有期货并阻止Akka呼叫的超时。如果Flink由于超时而失败,则应尝试增加此值。超时可能是由于计算机运行缓慢或网络拥塞引起的。超时值需要一个时间单位说明符(ms / s / min / h / d)。
akka.client-socket-worker-pool.pool-size-factor 1.0 池大小因子使用以下公式确定线程池大小:ceil(可用处理器*因子)。然后,结果大小受pool-size-min和pool-size-max值限制。
akka.client-socket-worker-pool.pool-size-max 2 要限制基于因素的最大线程数。
akka.client-socket-worker-pool.pool-size-min 1 最小线程数以上限为基础。
akka.client.timeout 60s 客户端上所有阻塞呼叫的超时。
akka.fork-join-executor.parallelism-factor 2.0 并行度因子用于通过以下公式确定线程池大小:ceil(可用处理器*因子)。然后,所得到的大小由并行度最小值和并行度最大值限制。
akka.fork-join-executor.parallelism-max 64 最大线程数上限为基于因子的并行数。
akka.fork-join-executor.parallelism-min 8 Min number of threads to cap factor-based parallelism number to.
akka.framesize 10485760b 在JobManager和TaskManager之间发送的消息的最大大小。如果Flink因消息超出此限制而失败,则应增加该限制。消息大小需要大小单位说明符。
akka.jvm-exit-on-fatal-error true akka发生崩溃时退出jvm
akka.log.lifecycle.events false 打开Akka的事件远程记录。调试时将此值设置为“ true”。
akka.lookup.timeout “10 s” 用于查找JobManager的超时。超时值必须包含一个时间单位说明符(ms / s / min / h / d)。
akka.retry-gate-closed-for 50 断开远程连接后,应关闭毫秒的门。
akka.server-socket-worker-pool.pool-size-factor 1.0 池大小因子使用以下公式确定线程池大小:ceil(可用处理器*因子)。然后,结果大小受pool-size-min和pool-size-max值限制。
akka.server-socket-worker-pool.pool-size-max 2 要限制基于因素的最大线程数。
akka.server-socket-worker-pool.pool-size-min 1 要限制基于因素的最小线程数。
akka.ssl.enabled true 启用S​​SL以进行Akka的远程通信。这仅在全局ssl标志security.ssl.enabled设置为true时适用。
akka.startup-timeout 超时之后,远程组件的启动被视为失败。
akka.tcp.timeout 20s 所有出站连接超时。如果由于网络速度慢而在连接TaskManager时遇到问题,则应增加此值。
akka.throughput 15 将线程返回池之前,在批处理中处理的消息数。低值表示合理的调度,而高值则可以以不公平为代价提高性能。
akka.transport.heartbeat.interval 1000s Akka运输故障检测器的心跳间隔。由于Flink使用TCP,因此不需要检测器。因此,通过将间隔设置为非常高的值来禁用检测器。如果您需要运输故障检测器,请将间隔设置为合理的值。间隔值需要一个时间单位说明符(ms / s / min / h / d)。
akka.transport.heartbeat.pause 6000s Akka的运输故障检测器可以接受的心跳暂停。由于Flink使用TCP,因此不需要检测器。因此,通过将暂停设置为很高的值来禁用检测器。如果您需要运输故障检测器,请将暂停设置为合理的值。暂停值需要一个时间单位说明符(ms / s / min / h / d)。
akka.transport.threshold 300.0 运输故障检测器的阈值。由于Flink使用TCP,因此检测器不是必需的,因此将阈值设置为较高的值。
akka.watch.heartbeat.interval 10s Akka的DeathWatch机制的心跳间隔,用于检测失效的TaskManager。如果由于丢失或延迟的心跳消息而错误地将TaskManager标记为无效,则应减小此值或增加akka.watch.heartbeat.pause。您可以在此处找到有关Akka的DeathWatch的完整说明
akka.watch.heartbeat.pause 60s Akka的DeathWatch机制可以接受的心跳暂停。较低的值不允许不规则的心跳。如果由于丢失或延迟的心跳消息而错误地将TaskManager标记为无效,则应增加此值或减小akka.watch.heartbeat.interval。较高的值会增加检测死的TaskManager的时间。您可以在此处找到有关Akka的DeathWatch的完整说明
akka.watch.threshold 12
DeathWatch故障检测器的阈值。较低的值容易产生误报,而较高的值会增加检测到死机TaskManager的时间。您可以在此处找到有关Akka的DeathWatch的完整说明

REST

配置项 默认值 说明
rest.address 默认的client连接到server的地址
rest.await-leader-timeout 30000 客户端等待领导者地址(例如Dispatcher或WebMonitorEndpoint)的时间(以毫秒为单位)
rest.bind-address 服务器绑定自身的地址。
rest.bind-port 8081 服务器绑定自身的端口。接受端口列表(“ 50100,50101”),范围(“ 50100-50200”)或两者的组合。建议设置一定范围的端口,以防止在同一台计算机上运行多个Rest服务器时发生冲突。
rest.client.max-content-length 104857600 客户端将处理的最大内容长度(以字节为单位)。
rest.connection-timeout 15000 客户端建立TCP连接的最长时间(以毫秒为单位)。
rest.idleness-timeout 300000 连接在失败之前保持空闲状态的最长时间(以毫秒为单位)。
rest.port 8081 客户端连接到的端口。如果未指定rest.bind-port,则REST服务器将绑定到该端口。
rest.retry.delay 3000 客户端在重试之间等待的时间(以毫秒为单位)(另请参见“ rest.retry.max-attempts”)。
rest.retry.max-attempts 20 如果可重试操作失败,客户端将尝试的重试次数。
rest.server.max-content-length 104857600 服务器将处理的最大内容长度(以字节为单位)。
rest.server.numThreads 4 用于异步处理请求的线程数。
rest.server.thread-priority 5 REST服务器执行程序用于处理异步请求的线程优先级。降低线程优先级将使Flink的主要组件有更多的CPU时间,而增加线程的优先级将为REST服务器的处理分配更多时间。

Blob Server

配置项 默认值 说明
blob.client.connect.timeout 0 Blob客户端的连接超时(以毫秒为单位)。
blob.client.socket.timeout 300000 Blob客户端的套接字超时(以毫秒为单位)。
blob.fetch.backlog 1000 定义BLOB积压的config参数在JobManager上获取。
blob.fetch.num-concurrent 50 config参数定义JobManager服务的最大并发BLOB读取次数。
blob.fetch.retries 5 config参数定义失败的BLOB提取的退休次数。
blob.offload.minsize 1048576 要卸载到BlobServer的最小大小。
blob.server.port 0 config参数定义Blob服务的服务器端口。
blob.service.cleanup.interval 3600 任务管理器中Blob缓存的清理间隔(以秒为单位)。
blob.service.ssl.enabled true 标记以覆盖对blob服务传输的ssl支持。
blob.storage.directory none config参数定义blob服务器要使用的存储目录。

YARN

配置项 默认值 说明
yarn.application-attempt-failures-validity-interval 10000 时间窗口(以毫秒为单位),用于定义重新启动AM时应用程序尝试失败的次数。不在此窗口范围内的故障将不予考虑。将此值设置为-1以便进行全局计数。浏览此处获取更多信息。
yarn.application-attempts ApplicationMaster重新启动的次数。请注意,整个Flink群集将重新启动,并且YARN Client将失去连接。另外,JobManager地址也会更改,您需要手动设置JM host:port。建议将此选项保留为1。
yarn.application-master.port 0 使用此配置选项,用户可以为Application Master(和JobManager)RPC端口指定端口,端口范围或端口列表。默认情况下,我们建议使用默认值(0)让操作系统选择适当的端口。特别是当多个AM在同一物理主机上运行时,固定端口分配会阻止AM启动。例如,在具有限制性防火墙的环境中在YARN上运行Flink时,此选项允许指定允许的端口范围。
yarn.appmaster.rpc.address 应用程序主RPC系统正在侦听的主机名或地址。
yarn.appmaster.rpc.port -1 应用程序主RPC系统正在侦听的端口。
yarn.appmaster.vcores 1 YARN应用程序主机使用的虚拟核心(vcore)的数量。
yarn.containers.vcores -1 每个YARN容器的虚拟核心数(vcore)。默认情况下,vcore数设置为每个TaskManager的插槽数(如果已设置),否则设置为1。为了使用此参数,您的群集必须启用CPU调度。您可以通过设置org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler来实现。
yarn.heartbeat.container-request-interval 500 如果Flink请求容器,则使用ResourceManager进行心跳之间的时间(以毫秒为单位):该值越低,由于请求和分配是通过心跳传输的,因此Flink会更快地收到有关容器分配的通知。该值越低,可能分配的多余容器越多,这些容器最终将被释放,但对纱线造成压力。如果在ResourceManager上观察到太多的容器分配,则建议增加此值。有关更多信息,请参见此链接。
yarn.heartbeat.interval 5 使用ResourceManager进行心跳之间的时间(以秒为单位)。
yarn.maximum-failed-containers 发生故障时系统将重新分配的最大容器数。
yarn.per-job-cluster.include-user-jar ORDER 定义是否为每个作业群集将用户jar包含在系统类路径中以及它们在路径中的位置。它们可以位于开头(“ FIRST”),结尾(“ LAST”),也可以基于其名称(“ ORDER”)进行定位。
yarn.properties-file.location 当Flink作业提交到YARN时,JobManager的主机和可用处理插槽的数量将写入属性文件,以便Flink客户端能够提取这些详细信息。此配置参数允许更改该文件的默认位置(例如,对于在用户之间共享Flink安装的环境)。
yarn.tags 以逗号分隔的标签列表,以应用于Flink YARN应用程序。

High Availability (HA)

配置项 默认值 说明
high-availability 定义用于集群执行的高可用性模式。要启用高可用性,请将此模式设置为“ ZOOKEEPER”或指定工厂类的FQN。
high-availability.cluster-id “/default” Flink群集的ID,用于将多个Flink群集彼此分开。需要为独立群集设置,但是会在YARN和Mesos中自动推断出来。
high-availability.job.delay 故障转移后JobManager恢复当前作业之前的时间。
high-availability.jobmanager.port 0 作业管理器在高可用性模式下使用的可选端口(范围)。
high-availability.storageDir Flink将元数据保留在高可用性设置中的文件系统路径(URI)。

Checkpointing

配置项 默认值 说明
state.backend none 用于存储和检查点状态的状态后端。
state.backend.async true 选择状态后端是否应在可能且可配置的情况下使用异步快照方法。某些状态后端可能不支持异步快照,或仅支持异步快照,而忽略此选项。
state.backend.fs.memory-threshold 1024 状态数据文件的最小大小。所有小于状态块的状态块都以内联方式存储在根检查点元数据文件中。
state.backend.fs.write-buffer-size 4096 写入文件系统的检查点流的写缓冲区的默认大小。实际的写缓冲区大小确定为该选项和选项“ state.backend.fs.memory-threshold”的最大值。
state.backend.incremental false 选择状态后端是否应创建增量检查点(如果可能)。对于增量检查点,仅存储与前一个检查点的差异,而不存储完整的检查点状态。某些状态后端可能不支持增量检查点,因此会忽略此选项。
state.backend.local-recovery false 此选项为此状态后端配置本地恢复。默认情况下,本地恢复处于禁用状态。当前,本地恢复仅涵盖键控状态后端。当前,MemoryStateBackend不支持本地恢复,请忽略此选项。
state.checkpoints.dir none 用于在Flink支持的文件系统中存储检查点的数据文件和元数据的默认目录。必须从所有参与的进程/节点(即所有TaskManager和JobManager)访问存储路径。
state.checkpoints.num-retained 1 要保留的最大已完成检查点数。
state.savepoints.dir none 保存点的默认目录。由状态后端用于将保存点写入文件系统(MemoryStateBackend,FsStateBackend,RocksDBStateBackend)。
taskmanager.state.local.root-dirs none config参数定义用于存储基于文件的状态以进行本地恢复的根目录。当前,本地恢复仅涵盖键控状态后端。当前,MemoryStateBackend不支持本地恢复,请忽略此选项

你可能感兴趣的:(flink)