【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.size1024m默认值为1G大小的jm堆内存空间
taskmanager.heap.size1024m默认值为1G大小的tm堆内存空间,当使用yarn模式启动的时候,这个值会被自动设置为申请到yarn上跑task manager容器的大小减去一定的容错大小,所以实际运行在container中的tm的heap size会比实际申请的小,container内真正能够使用的jvm heap size大约为申请资源的9/10
parallelism.default1默认的任务并行度
taskmanager.numberOfTaskSlots1每一个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.enabledfalse是否启用内部通讯ssl安全加密
security.ssl.rest.enabledfalse是否在rest 接口上启用ssl传输

全部参考配置

HDFS

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

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

配置项默认值说明
fs.hdfs.hadoopconfhadoop的配置目录绝对路径,该参数作为可选参数,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.hdfsdefaulthdfs-site.xml的绝对路径
fs.hdfs.hdfssitehdfs-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.default1默认的job并行度

JobManager

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

TaskManager

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

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

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

Distributed Coordination

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

Distributed Coordination (via Akka)

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

REST

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

Blob Server

配置项默认值说明
blob.client.connect.timeout0Blob客户端的连接超时(以毫秒为单位)。
blob.client.socket.timeout300000Blob客户端的套接字超时(以毫秒为单位)。
blob.fetch.backlog1000定义BLOB积压的config参数在JobManager上获取。
blob.fetch.num-concurrent50config参数定义JobManager服务的最大并发BLOB读取次数。
blob.fetch.retries5config参数定义失败的BLOB提取的退休次数。
blob.offload.minsize1048576要卸载到BlobServer的最小大小。
blob.server.port0config参数定义Blob服务的服务器端口。
blob.service.cleanup.interval3600任务管理器中Blob缓存的清理间隔(以秒为单位)。
blob.service.ssl.enabledtrue标记以覆盖对blob服务传输的ssl支持。
blob.storage.directorynoneconfig参数定义blob服务器要使用的存储目录。

YARN

配置项默认值说明
yarn.application-attempt-failures-validity-interval10000时间窗口(以毫秒为单位),用于定义重新启动AM时应用程序尝试失败的次数。不在此窗口范围内的故障将不予考虑。将此值设置为-1以便进行全局计数。浏览此处获取更多信息。
yarn.application-attemptsApplicationMaster重新启动的次数。请注意,整个Flink群集将重新启动,并且YARN Client将失去连接。另外,JobManager地址也会更改,您需要手动设置JM host:port。建议将此选项保留为1。
yarn.application-master.port0使用此配置选项,用户可以为Application Master(和JobManager)RPC端口指定端口,端口范围或端口列表。默认情况下,我们建议使用默认值(0)让操作系统选择适当的端口。特别是当多个AM在同一物理主机上运行时,固定端口分配会阻止AM启动。例如,在具有限制性防火墙的环境中在YARN上运行Flink时,此选项允许指定允许的端口范围。
yarn.appmaster.rpc.address应用程序主RPC系统正在侦听的主机名或地址。
yarn.appmaster.rpc.port-1应用程序主RPC系统正在侦听的端口。
yarn.appmaster.vcores1YARN应用程序主机使用的虚拟核心(vcore)的数量。
yarn.containers.vcores-1每个YARN容器的虚拟核心数(vcore)。默认情况下,vcore数设置为每个TaskManager的插槽数(如果已设置),否则设置为1。为了使用此参数,您的群集必须启用CPU调度。您可以通过设置org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler来实现。
yarn.heartbeat.container-request-interval500如果Flink请求容器,则使用ResourceManager进行心跳之间的时间(以毫秒为单位):该值越低,由于请求和分配是通过心跳传输的,因此Flink会更快地收到有关容器分配的通知。该值越低,可能分配的多余容器越多,这些容器最终将被释放,但对纱线造成压力。如果在ResourceManager上观察到太多的容器分配,则建议增加此值。有关更多信息,请参见此链接。
yarn.heartbeat.interval5使用ResourceManager进行心跳之间的时间(以秒为单位)。
yarn.maximum-failed-containers发生故障时系统将重新分配的最大容器数。
yarn.per-job-cluster.include-user-jarORDER定义是否为每个作业群集将用户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.port0作业管理器在高可用性模式下使用的可选端口(范围)。
high-availability.storageDirFlink将元数据保留在高可用性设置中的文件系统路径(URI)。

Checkpointing

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值