|
dataLogDir
|
存放事务日志的文件夹。未指定时日志文件存放在
dataDir
目录中,一般建议创建
dataDir
和
dataLogDir
,将数据文件和日志文件区分存放在不同的位置,这有助于避免日志记录和快照之间的竞争。拥有专用日志设备对吞吐量和稳定的延迟有很大影响。强烈建议事务日志存放于专用日志设备
|
|
|
globalOutstandingLimit
|
当客户端提交请求的速度比 ZooKeeper 处理请求的速度快,尤其是在客户端很多的情况下。为了防止 ZooKeeper 因请求积压排队而耗尽内存,ZooKeeper 将限制客户端访问使整个排队集合中不超过 globalOutstandingLimit个 未完成的请求。
对应Java 系统属性:
zookeeper.globalOutstandingLimit
|
默认限制为 1,000,例如有 3 个成员,每个成员将有 1000 / 2 = 500 个单独的限制。
|
|
preAllocSize
|
预分配的事务日志文件块大小,ZooKeeper 以
preAllocSize
千字节的块为单位分配事务日志文件中的空间
对应Java系统属性:zookeeper.preAllocSize
|
默认块大小为 64M
|
|
snapCount
|
ZooKeeper 使用快照和事务日志记录其事务数据。ZK 使用事务日志和快照来记录事务(考虑 提前写日志 write-ahead log). snapCount 决定了多少个事务日志之后会开始产生快照. 为了防止所有的成员同时生成快照, 每个 ZK服务器会产生一个随机数处于 [snapCount/2+1, snapCount] 之间, 在达到这个随机数之后就会产生快照。
对应Java系统属性:zookeeper.snapCount
|
100000
|
|
commitLogCount
|
ZK会在内存中维护一部分已提交的请求列表以供服务器间同步最近的请求的使用. 在快照很大的时候(> 100,000), 能提高同步的性能。
对应Java系统属性:zookeeper.commitLogCount
|
500
|
|
snapSizeLimitInKb
|
和 snapCount做作用类似 , 但是这个使用的是文件大小来进行限制。在生成快照(以及滚转事务日志)之前,事务日志中记录的事务集允许的总字节大小由snapSizeLimitInKb确定。
对应Java系统属性:zookeeper.snapSizeLimitInKb
|
默认是 4,194,304 (4GB), 负数表示不开启这个功能.
|
|
txnLogSizeLimitInKb
|
可以使用 txnLogSizeLimitInKb 更直接地控制 Zookeeper 事务日志文件。使用事务日志完成同步时,较大的 txn 日志可能会导致关注者同步速度变慢。这是因为领导者必须扫描磁盘上的相应日志文件,以查找要从中启动同步的事务。默认情况下,此功能处于关闭状态,snapCount 和 snapSizeLimitInKb 是唯一限制事务日志大小的值。启用后,Zookeeper 将在达到任何限制时滚动日志。请注意,实际日志大小可能会超过此值,因为序列化事务的大小。另一方面,如果此值设置得太接近(或小于)
preAllocSize
,则可能导致 Zookeeper 为每个事务滚动日志。虽然这不是正确性问题,但这可能会导致性能严重下降。为了避免这种情况并充分利用此功能,建议将值设置为 N *
preAllocSize
,其中 N >= 2。
对应Java系统属性:zookeeper.txnLogSizeLimitInKb
|
默认情况下,此功能处于关闭状态
|
|
maxCnxns
|
限制每个zk服务器并发的连接总数(每个服务器的每个客户端端口). 用来防止特定类型的 DOS 攻击。 因为 serverCnxnFactory 和 secureServerCnxnFactory 是分开算的,所以最多的连接数是 2 *maxCnxns。
对应Java系统属性:
zookeeper.maxCnxns
|
默认是 0, 表示没有限制.。
|
|
maxClientCnxns
|
在 socket 层面限制一个客户端(根据ip)允许连接zk集群中某个服务器的最大连接数
限制范围仅仅是单台客户机对单台服务器之间的链接数限制,并不能控制集群中所有客户端的连接数总和。
|
默认60. 设置成0 表示没有限制
|
|
clientPortAddress
|
3.3.0新增,用于侦听客户端连接的地址(IPv4、IPv6 或主机名), 默认监听使用 clientPort 的所有连接
|
|
|
minSessionTimeout
|
3.3.0新增,服务器允许客户端协商的最小会话超时(以毫秒为单位)。
|
默认值为
tickTime
的 2 倍。
|
|
maxSessionTimeout
|
3.3.0新增,服务器允许客户端协商的最大会话超时(以毫秒为单位)。
|
默认值为
tickTime
的 20 倍。
|
|
fsync.warningthresholdms
|
3.3.4新增,事务日志执行 fsync 的时候超过了这个毫秒数就会打印警告信息。
对应Java系统属性:zookeeper.fsync.warningthresholdms
|
默认 1000
|
|
maxResponseCacheSize
|
确定存储最近读取记录的序列化形式的缓存的大小, 可以使用 response_packet_cache_hits 和 response_packet_cache_misses 指标来调整这个值。
对应Java系统属性:zookeeper.maxResponseCacheSize
|
默认是 400, 负数或者 0 表示不启用。
|
|
maxGetChildrenResponseCacheSize
|
3.6.0新增,与 maxResponseCacheSize 类似,但适用于获取子请求。可以使用指标 response_packet_get_children_cache_hits和 response_packet_get_children_cache_misses来调整这个值。
对应Java系统属性:zookeeper.maxGetChildrenResponseCacheSize
|
默认是 400, 负数或者 0 表示不启用。
|
|
autopurge.snapRetainCount
|
3.4.0新增,ZooKeeper 自动清除功能分别在 dataDir 和 dataLogDir中保留 最新快照和相应的事务日志的个数,并删除其余部分。
|
默认值为 3。最小值为 3。
|
|
autopurge.purgeInterval
|
3.4.0新增,触发自动清除日志任务的间隔。
|
默认是0表示不开启(以小时为单位)
|
|
syncEnabled
|
3.4.6, 3.5.0新增,是否允许让观察者和其他参与者一样把事务日志写到磁盘, 减少观察者重启恢复的时间。
对应Java系统属性:zookeeper.observer.syncEnabled
|
默认是true , 设置为 false 关闭。
|
|
extendedTypesEnabled
|
3.5.4,3.6.0新增,定义以启用扩展功能,例如创建 TTL 节点]。默认情况下,它们处于禁用状态。重要说明:启用后,由于内部限制,服务器 ID 必须小于 255。
仅限Java系统属性:zookeeper.extendedTypesEnabled
|
|
|
emulate353TTLNodes
|
3.5.4、3.6.0新增,由于ZOOKEEPER-2901,3.5.4/3.6.0版本中不支持在3.5.3中创建的TTL节点。然而,通过zookeeper.emulate353TTLNodes系统属性提供了解决办法。如果您在ZooKeeper 3.5.3中使用了TTL节点,并且除了zookeeper.extendedTypesEnabled外,还需要将zookeeper.emulate353TTLNodes的兼容性保持为
true
。注意:由于错误,服务器ID必须为127或更少。此外,最大支持TTL值为
1099511627775
,小于3.5.3(
1152921504606846975
)中允许的值。
仅限Java系统属性:zookeeper.emulate353TTLNodes
|
|
|
watchManagerName
|
3.6.0新增,在ZOOKEEPER-1179添加, 添加了新的观察程序管理器 WatchManagerOptimized,以优化繁重的监视用例中的内存开销。此配置用于定义要使用的观察程序管理器。目前,我们仅支持 WatchManager 和 WatchManagerOptimized。
仅限Java系统属性:zookeeper.watchManagerName
|
|
|
watcherCleanThreadsNum
|
3.6.0新增,在 ZOOKEEPER-1179添加, 新的观察者管理器 WatchManagerOptimized 将异步并发地清理下线的观察者,此配置用于决定 WatcherCleaner 中使用了多少线程。线程越多,通常意味着清理吞吐量越大。默认值为 2,即使对于繁重且连续的会话关闭/重新创建案例,也足够好。
仅限Java系统属性:zookeeper.watcherCleanThreadsNum
|
2
|
|
watcherCleanThreshold
|
3.6.0新增,新增于 ZOOKEEPER-1179。新的 watcher 管理器 WatchManagerOptimized 会懒惰地清理死掉的 watcher,清理过程比较繁重,批处理会降低成本,提高性能。此设置用于确定批大小。默认值为 1000,如果没有内存或清理速度问题,我们不需要更改它。
仅限Java系统属性:zookeeper.watcherCleanThreshold
|
1000
|
|
watcherCleanIntervalInSeconds
|
3.6.0新增,新增于 ZOOKEEPER-1179。新的 watcher 管理器 WatchManagerOptimized 会懒惰地清理死掉的 watcher,清理过程比较繁重,批处理会降低成本,提高性能。除了 watcherCleanThreshold 之外,此设置还用于在一定时间后清理死的watcher,即使死的watcher不大于 watcherCleanThreshold,这样我们就不会将死的观察者留在那里太久。
仅限Java系统属性:zookeeper.watcherCleanIntervalInSeconds
|
默认设置为 10 分钟,通常不需要更改。
|
|
maxInProcessingDeadWatchers
|
3.6.0新增,新增于 ZOOKEEPER-1179,控制我们在 WatcherCleaner 中可以有多少积压,当它达到这个数字时,它会减慢向 WatcherCleaner 添加死观察者的速度,这反过来又会减慢添加和关闭观察者的速度,这就可以避免 OOM 问题。
仅限于Java系统属性:zookeeper.maxInProcessingDeadWatchers
|
默认情况下没有限制,可以将其设置为 watcherCleanThreshold * 1000 等值。
|
|
bitHashCacheSize
|
3.6.0新增,新增于ZOOKEEPER-1179。这是用于确定 BitHashSet 实现中的 HashSet 缓存大小的设置
仅限于Java系统属性:zookeeper.bitHashCacheSize
|
|
|
fastleader.minNotificationInterval
|
领导者选举中两次连续通知检查之间的时间长度的下限。此间隔决定了对等方等待检查选举票集的时间,并影响选举解决的速度。对于长时间选举,间隔遵循从配置的最小值 (this) 和配置的最大值 (fastleader.maxNotificationInterval) 的退避策略。
Java系统属性:zookeeper.fastleader.minNotificationInterval
|
|
|
fastleader.maxNotificationInterval
|
领导者选举中两次连续通知检查之间的时间长度上限。此间隔决定了对等方等待检查选举票集的时间,并影响选举解决的速度。对于长时间选举,间隔遵循从配置的最小值 (fastleader.minNotificationInterval) 和配置的最大值 (this) 开始的回退策略。
Java系统属性:zookeeper.fastleader.maxNotificationInterval
|
|
|
connectionMaxTokens
|
3.6.0新增,这是用于优化服务器端连接限制程序的参数之一,服务器端连接限制器是一种基于令牌的速率限制机制,具有可选的概率丢弃。此参数定义 token-bucket 中的最大令牌数。设置为 0 时,将禁用限制。默认值为 0。
Java系统属性:zookeeper.connection_throttle_tokens
|
默认值为 0。
|
|
connectionTokenFillTime
|
3.6.0新增,这是用于优化服务器端连接限制程序的参数之一,服务器端连接限制器是一种基于令牌的速率限制机制,具有可选的概率丢弃。此参数定义使用
connectionTokenFillCount
令牌重新填充令牌存储桶的时间间隔(以毫秒为单位)。
Java系统属性:zookeeper.connection_throttle_fill_time
|
默认值为 1。
|
|
connectionTokenFillCount
|
3.6.0新增,这是用于优化服务器端连接限制程序的参数之一,服务器端连接限制器是一种基于令牌的速率限制机制,具有可选的概率丢弃。此参数定义每
connectionTokenFillTime
毫秒要添加到令牌存储桶的令牌数。
Java系统属性:zookeeper.connection_throttle_fill_count
|
默认值为 1。
|
|
connectionFreezeTime
|
3.6.0新增,这是用于优化服务器端连接限制程序的参数之一,服务器端连接限制器是一种基于令牌的速率限制机制,具有可选的概率丢弃。此参数定义调整丢弃概率时的间隔(以毫秒为单位)。设置为 -1 时,禁用概率删除。
Java系统属性:zookeeper.connection_throttle_freeze_time
|
默认值为 -1。
|
|
connectionDropIncrease
|
3.6.0新增,这是用于优化服务器端连接限制程序的参数之一,服务器端连接限制器是一种基于令牌的速率限制机制,具有可选的概率丢弃。此参数定义增加的丢弃概率。限制器检查每个
connectionFreezeTime
毫秒,如果令牌存储桶为空,则丢弃概率将增加
connectionDropIncrease
。
Java系统属性:connection_throttle_drop_increase
|
默认值为 0.02。
|
|
connectionDropDecrease
|
3.6.0新增,这是用于优化服务器端连接限制程序的参数之一,服务器端连接限制器是一种基于令牌的速率限制机制,具有可选的概率丢弃。此参数定义下降概率。限制器检查每个
connectionFreezeTime
毫秒,如果令牌存储桶的令牌数超过阈值,则丢弃概率将降低
connectionDropDecrease
。阈值为
connectionMaxTokens
*
connectionDecreaseRatio
。
Java系统属性:zookeeper.connection_throttle_drop_decrease
|
默认值为 0.002。
|
|
connectionDecreaseRatio
|
3.6.0新增,这是用于调整服务器端连接限制程序的参数之一,这是一种基于令牌的速率限制机制,具有可选的概率丢弃功能。此参数定义用于降低丢弃概率的阈值。
对应Java系统属性:zookeeper.connection_throttle_decrease_ratio
|
默认值为 0。
|
|
zookeeper.connection_throttle_weight_enabled
|
3.6.0新增,仅限Java系统属性,节流时是否考虑连接权重。仅当启用连接限制时才有用,即 connectionMaxTokens 大于 0。
|
默认值为 false
|
|
zookeeper.connection_throttle_global_session_weight
|
3.6.0新增,仅限Java系统属性,全局会话的权重。它是全局会话请求通过连接限制程序所需的令牌数。它必须是不小于本地会话权重的正整数。
|
默认值为 3。
|
|
zookeeper.connection_throttle_local_session_weight
|
3.6.0新增,仅限Java系统属性,本地会话的权重。它是本地会话请求通过连接限制程序所需的令牌数。它必须是一个正整数,不大于全局会话或续订会话的权重。
|
默认值为 1。
|
|
zookeeper.connection_throttle_renew_session_weight
|
3.6.0新增,仅限Java系统属性,续订会话的权重。它也是重新连接请求通过限制器所需的令牌数。它必须是不小于本地会话权重的正整数。
|
默认值为 2。
|
|
clientPortListenBacklog
|
3.4.14, 3.5.5, 3.6.0新增,ZooKeeper 服务器套接字的套接字积压长度。这将控制将在服务器端排队等待 ZooKeeper 服务器处理的请求数。超过此长度的连接将收到网络超时(30 秒),这可能会导致 ZooKeeper 会话过期问题。默认情况下,此值为 unset (),在 Linux 上,它使用 backlog 。此值必须为正数。
|
|
|
serverCnxnFactory
|
指定 ServerCnxnFactory 实现。
Java系统属性:zookeeper.serverCnxnFactory
|
默认值为
NettyServerCnxnFactory``NIOServerCnxnFactory
|
|
flushDelay
|
延迟刷新提交日志的时间(以毫秒为单位)。不影响
maxBatchSize
定义的限制。具有高写入速率的集成可能会看到吞吐量提高,值为 10-20 毫秒。
Java系统属性:zookeeper.flushDelay
|
默认情况下禁用(值为 0)。
|
|
maxWriteQueuePollTime
|
如果启用
了 flushDelay
,这将确定在没有新请求排队的情况下刷新之前等待的时间(以毫秒为单位)。
Java系统属性:zookeeper.maxWriteQueuePollTime
|
默认设置为
flushDelay
/3(默认隐式禁用)。
|
|
maxBatchSize
|
在触发刷新提交日志之前,服务器中允许的事务数。不影响
flushDelay
定义的限制。
Java系统属性:zookeeper.maxBatchSize
|
默认值为 1000。
|
|
enforceQuota
|
强制执行配额检查。当启用并且客户端超过 znode 下的总字节数或子计数限制配额时,服务器将拒绝请求并强制回复客户端 QuotaExceededException。
|
默认值为:false。
|
|
requestThrottleLimit
|
3.6.0新增,在 RequestThrottler 开始停止之前允许的未完成请求总数。设置为 0 时,将禁用限制。
Java系统属性:zookeeper.request_throttle_max_requests
|
默认值为 0。
|
|
requestThrottleStallTime
|
3.6.0新增,线程可能等待通知可以继续处理请求的最长时间(以毫秒为单位)。
Java系统属性:zookeeper.request_throttle_stall_time
|
默认值为 100。
|
|
requestThrottleDropStale
|
3.6.0新增,启用后,限制器将丢弃过时的请求,而不是将它们发出到请求管道。过时请求是由现已关闭的连接发送的请求,或请求延迟将高于 sessionTimeout 的请求。
Java系统属性:request_throttle_drop_stale
|
默认值为 true。
|
|
requestStaleLatencyCheck
|
启用后,如果请求延迟高于其关联的会话超时,则将请求视为过时。默认情况下禁用。
Java系统属性:zookeeper.request_stale_latency_check
|
|
|
requestStaleConnectionCheck
|
3.6.0新增,启用后,如果请求的连接已关闭,则该请求被视为过时。默认启用。
Java系统属性:zookeeper.request_stale_connection_check
|
|
|
zookeeper.request_throttler.shutdownTimeout
|
3.6.0新增,仅限Java系统属性。RequestThrottler 在关闭期间等待请求队列耗尽的时间(以毫秒为单位),然后强制关闭。
|
默认值为 10000。
|
|
advancedFlowControlEnabled
|
根据 ZooKeeper 流水线的状态,在 netty 中使用精确的流量控制,避免直接缓冲区 OOM。它将禁用 Netty 中的AUTO_READ。
Java系统属性:zookeeper.netty.advancedFlowControl.enabled
|
|
|
enableEagerACLCheck
|
设置为“true”时,在将请求发送到仲裁之前,对每个本地服务器上的写入请求启用预先 ACL 检查。
Java系统属性:zookeeper.enableEagerACLCheck
|
默认值为“false”。
|
|
maxConcurrentSnapSyncs
|
领导者或追随者可以同时提供的最大快照同步数。
Java系统属性:zookeeper.leader.maxConcurrentSnapSyncs
|
默认值为 10。
|
|
maxConcurrentDiffSyncs
|
领导者或追随者可以同时服务的最大差异同步数。
Java系统属性: zookeeper.leader.maxConcurrentDiffSyncs
|
默认值为 100。
|
|
digest.enabled
|
3.6.0新增功能,添加了摘要功能,用于在从磁盘加载数据库、追赶和跟随 leader 时检测 ZooKeeper 内部的数据不一致。
Java系统属性:zookeeper.digest.enabled
|
|
|
snapshot.compression.method
|
3.6.0新增,此属性控制 ZooKeeper 在将快照存储在磁盘上之前是否应压缩快照。
可选值有三个:
1)"":已禁用(无快照压缩)。这是默认行为。
2)gz
3)snappy
Java系统属性:zookeeper.snapshot.compression.method
|
""
|
|
snapshot.trust.empty
|
3.5.6新增,此属性控制 ZooKeeper 是否应将丢失的快照文件视为无法恢复的致命状态。设置为 true 以允许 ZooKeeper 服务器在没有快照文件的情况下进行恢复。这应该只在从旧版本的 ZooKeeper(3.4.x,3.5.3 之前)升级期间设置,其中 ZooKeeper 可能只有事务日志文件,但没有快照文件。如果在升级过程中设置了该值,建议在升级后将该值设置回 false,并重新启动 ZooKeeper 进程,以便 ZooKeeper 在恢复过程中可以继续进行正常的数据一致性检查。
|
默认值为 false。
|
|
audit.enable
|
3.6.0新增,默认情况下,审核日志处于禁用状态。设置为“true”以启用它。
Java系统属性:zookeeper.audit.enable
|
默认值为“false”。
|
|
audit.impl.class
|
3.6.0新增,用于实现审计记录器的类。默认情况下,基于logback的审计记录器org.apache.zookeeper.audit 。使用 Slf4jAuditLogger。
Java系统属性: zookeeper.audit.impl.class
|
|
|
largeRequestMaxBytes
|
3.6.0新增,所有正在进行的大型请求的最大字节数。如果即将到来的大型请求导致超出限制,则连接将关闭。
Java系统属性:zookeeper.largeRequestMaxBytes
|
默认值为 100 * 1024 * 1024。
|
|
largeRequestThreshold
|
3.6.0新增,超过该阈值后,请求被视为大型请求的大小阈值。如果为 -1,则所有请求都被视为小请求,从而有效地关闭大请求限制。
Java系统属性:zookeeper.largeRequestThreshold
|
默认值为 -1。
|
|
outstandingHandshake.limit
|
3.6.0新增,ZooKeeper 中可能存在的最大动态 TLS 握手连接数,超过此限制的连接将在开始握手之前被拒绝。此设置不会限制最大 TLS 并发性,但有助于避免在动态 TLS 握手过多时由于 TLS 握手超时而导致的羊群效应。将其设置为 250 之类的值足以避免羊群效应。
Java系统属性: zookeeper.largeRequestThreshold
|
|
|
netty.server.earlyDropSecureConnectionHandshakes
|
如果 ZooKeeper 服务器未完全启动,请在执行 TLS 握手之前断开 TCP 连接。这对于防止在重新启动后用许多并发 TLS 握手淹没服务器非常有用。请注意,如果启用此标志,则服务器在未完全启动时不会响应“ruok”命令。
Java系统属性:zookeeper.netty.server.earlyDropSecureConnectionHandshakes
|
|
|
throttledOpWaitTime
|
RequestThrottler 队列中将请求标记为受限制的时间。除了将受限制的请求送到它所属的服务器的管道中以保持所有请求的顺序外,不会进行处理。FinalProcessor 将对这些未消化的请求发出错误响应(新错误代码:ZTHROTTLEDOP)。目的是让客户端不要立即重试它们。设置为 0 时,不会限制任何请求。
Java系统属性:zookeeper.throttled_op_wait_time
|
默认值为 0。
|
|
learner.closeSocketAsync
|
3.7.0新增,启用后,学习者将异步关闭仲裁套接字。 这对于 TLS 连接非常有用,在这些连接中,关闭套接字可能需要很长时间、阻塞关闭过程、可能延迟新的领导者选举以及使仲裁不可用。异步关闭套接字可以避免阻塞关闭过程,尽管套接字关闭时间很长,并且可以在套接字关闭时启动新的领导者选举。
Java系统属性:zookeeper.learner.closeSocketAsync
learner.closeSocketAsync(为向后兼容而添加)
|
默认值为 false。
|
|
leader.closeSocketAsync
|
3.7.0新增,启用后,领导者将异步关闭仲裁套接字。 这对于关闭套接字可能需要很长时间的 TLS 连接非常有用。如果由于 SyncLimitCheck 失败而在 ping() 中启动断开跟随程序的连接,则较长的套接字关闭时间将阻止向其他跟随程序发送 ping。如果不接收 ping,其他关注者将不会向领导者发送会话信息,这会导致会话过期。将此标志设置为 true 可确保定期发送 ping。
Java系统属性:zookeeper.leader.closeSocketAsync
leader.closeSocketAsync(为向后兼容而添加)
|
默认值为 false。
|
|
learner.asyncSending
|
3.7.0新增,Learner 中的发送和接收数据包是在关键部分同步完成的。不合时宜的网络问题可能导致关注者挂起(请参阅 ZOOKEEPER-3575 和 ZOOKEEPER-4074)。新设计将 Learner 中的发送数据包移动到单独的线程,并异步发送数据包。使用此参数 (learner.asyncSending) 启用新设计。
Java系统属性:zookeeper.learner.asyncSending
learner.asyncSending(为向后兼容而添加)
|
默认值为 false。
|
|
forward_learner_requests_to_commit_processor_disabled
|
设置此属性后,来自学习者的请求不会排队到 CommitProcessor 队列,这将有助于节省资源和 leader 上的 GC 时间。
Java系统属性:zookeeper.forward_learner_requests_to_commit_processor_disabled
|
默认值为 false。
|
|
serializeLastProcessedZxid.enabled
|
3.9.0新增,如果启用,ZooKeeper 会在快照时序列化
lastProcessedZxid
,并在还原时对其进行反序列化。需要启用才能通过管理服务器命令执行快照和还原,因为没有快照文件名来提取 lastProcessedZxid。
Java系统属性:zookeeper.serializeLastProcessedZxid.enabled
|
默认值为 true。
|
|
|
|
|