zookeeper版本选择与配置参数调优

2023-10-27

一、zookeeper 发布策略

Apache ZooKeeper 社区一次支持两个发布分支:stable和current。ZooKeeper的稳定版本是 3.7.x,当前版本是 3.8.x。一旦发布新的次要版本,稳定版本预计将很快退役,大约半年后将宣布为 End-of-Life。在半年的宽限期内,预计只会为该版本发布安全和关键修复程序。宣布 EoL 后,社区不再提供进一步的补丁。所有 ZooKeeper 版本都可以从官方 Apache 档案中访问。

Apache ZooKeeper 3.8.0(当前版本)

Apache ZooKeeper 3.7.1(最新稳定版)

Apache ZooKeeper 3.6.3 (稳定版)

Apache ZooKeeper 3.5.10(3.5 自 2022 年 6 月 1 日起停产)

详细见zookeeper官网:zookeeper 版本介绍

1、版本选择

  • zookeeper版本上面已经介绍了当前最新版本3.8.0,版本选择我们最好不要选择最新版本(除非是修复了以前版本特别严重的bug),也不要选择特别老版本;选择中间版本就好,如上例子我们就可以选择 ZooKeeper 3.6.3 (稳定版)

  • 为什么不选择3.7.1,主要原因有以下2点
    1、业务背景是因为Flink-1.15 放弃对 Zookeeper 3.4.x 的支持,前面测试的zookeeper都是基于zookeeper 3.6.x做测试,这个时候如果我们用的是3.7.x ,那么对于开发而言又要增加测试成本的工作量
    2、这边在了解版本的时候,看到网上基本都是用的 ZooKeeper 3.6.x

  • Apache ZooKeeper 3.6.3 (稳定版)发行说明

  • Apache ZooKeeper 3.6.3 (稳定版)下载包地址

  • zookeeper 各个版本分支详见:zookeeper branch doc

在这里插入图片描述

2、Flink_ha 特性

Flink1.15 仅支持ZooKeeper3.5/3.6,不再支持3.4。

在这里插入图片描述
在这里插入图片描述

其中的ZooKeeper Versions描述默认使用3.4,可以自行调整为3.5。从文档上来看自1.11版本就添加了这段描述,到目前最新稳定版本(1.16.0)依然是这么描述的。其实在1.15的 ReleaseNote 中明确写了,不再支持3.4,网上已经有人验证过任务直接报错

二、zookeeper 参数优化

  • 不要使用zk的默认配置,默认配置就是一个定时炸弹

  • 在网上也找了一些相关优化参数,无非就主要的那么几个,下面列出需要调整的相关参数

1. 配置snapshot文件清理策略
autopurge.purgeInterval=1
autopurge.purgeInterval:开启清理事务日志和快照文件的功能,单位是小时。默认是0,表示不开启自动清理功能。
autopurge.snapRetainCount=10
autopurge.snapRetainCount:指定了需要保留的文件数目。默认是保留3个。

2. 限制snapshot数量
snapCount=3000000
每snapCount次事务日志输出后,触发一次快照(snapshot)。 ZooKeeper会生成一个snapshot文件和事务日志文件。 默认是100000。

3. log和data数据分磁盘存储
dataDir:存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。
dataLogDir:事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。

4. 调整JVM大小
ZooKeeper的JVM内存默认是根据操作系统本身内存大小的一个百分比预先分配的,所以这不是我们所需要的。

在./bin/zkEnv.sh文件中,有如下配置项:
if [ -f "$ZOOCFGDIR/java.env" ]
then
    . "$ZOOCFGDIR/java.env"
fi
我们在./conf/java.env文件中配置JVM的内存,增加如下配置:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
export JVMFLAGS="-Xms10240m -Xmx20480m $JVMFLAGS"
修改完成使用jmap -heap $pid来验证内存修改情况。

5. ZNode中可以存储数据星的最大值,默认值是1M。
jute.maxbuffer
修改jvm内存参数jute.maxbuffer大小调整到10M=10240KB=10485760Bytes
修改bin/zkServer.sh或者zkEnv.sh
JVMFLAGS="$JVMFLAGS -Djute.maxbuffer=10485760"
tickTime=2000
ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime。 默认值2000,单位毫秒。

initLimit=10
Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit 时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,Flower在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。
initLimit=30000

syncLimit=5
在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果Leader发出心跳包在syncLimit之后,还没有从Flower那里收到响应,那么就认为这个Flower已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题。

maxClientCnxns=500
单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制。

maxSessionTimeout=60000000
Session超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的Session超时时间是在2 * tickTime ~ 20 * tickTime 这个范围

preAllocSize=131072
预先开辟磁盘空间,用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数。单位kb。

ZooKeeper的磁盘建议使用SSD,因为zookeeper必须具有低延迟磁盘写入才能以最佳方式执行。对zookeeper的每个请求都必须提交到仲裁中每个服务器上的磁盘上,然后才能读取结果。对于生产部署,建议在每个zookeeper服务器上使用大小至少为64 gb的专用ssd。

三、最终参数配置

# cat conf/zoo.cfg 
autopurge.purgeInterval=24
autopurge.snapRetainCount=5
clientPort=2181
dataDir=/data/zookeeper
dataLogDir=/log/zookeeper
initLimit=10
maxClientCnxns=500
maxSessionTimeout=60000
minSessionTimeout=4000
syncLimit=5
tickTime=2000
4lw.commands.whitelist=*
metricsProvider.exportJvmInfo=true
skipACL=yes
forceSync=no
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpPort=7000
server.1=0.0.0.1:2888:3888
server.2=0.0.0.2:2888:3888
server.3=0.0.0.3:2888:3888

1、其他参数介绍

  • 主要配置上面已经介绍了,有几个参数没有介绍的,参数介绍如下
# 3.4.10 中的新功能,此属性包含逗号分隔的四字母单词命令列表。引入它是为了对 ZooKeeper 可以执行的命令集提供细粒度的控制
4lw.commands.whitelist=*
# 如果将此属性设置为true,则Prometheus.io将导出有关JVM的指标,默认值为true
metricsProvider.exportJvmInfo=true
# metric Prometheus 监控配置,如果用的其它监控方案这里可以注释掉
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
# metric Prometheus 监控端口,同上,如果用的其它监控方案这里可以注释掉
metricsProvider.httpPort=7000

相关参考借鉴:
Flink_zookeeper版本
zookeeper配置优化

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

zookeeper版本选择与配置参数调优 的相关文章

  • Flink + Hudi 实现多流拼接(大宽表)

    1 背景 经典场景 Flink 侧实现 业务侧通常会基于实时计算引擎在流上做多个数据源的 JOIN 产出这个宽表 但这种解决方案在实践中面临较多挑战 主要可分为以下两种情况 维表 JOIN 场景挑战 指标数据与维度数据进行关联 其中维度数据
  • ZooKeeper(六)权限管理机制

    一 ZooKeeper权限管理机制 1 1 权限管理ACL Access Control List ZooKeeper 的权限管理亦即ACL 控制功能 使用ACL来对Znode进行访问控制 ACL的实现和Unix文件访问许可非常相似 它使用
  • ZooKeeper面试题(2020最新版,狂神说docker进阶笔记

    这里 process 主要就是通过 ServerCnxn 对应的 TCP 连接发送 Watcher 事件通知 9 客户端回调 Watcher 客户端 SendThread 线程接收事件通知 交由 EventThread 线程回调 Watch
  • 大数据技术之 Flink-CDC

    第1章 CDC简介 1 1 什么是 CDC CDC 是 Change Data Capture 变更数据获取 的简称 核心思想是 监测并捕获数据库的变动 包括数据或数据表的插入 更新以及删除等 将这些变更按发生的顺序完整记录下来 写入到消息
  • Docker搭建zookeeper

    问题背景 前言 本文参考自 docker compose快速搭建Zookeeper集群 熬到凌晨三点多验证部署成功 网上有很多文章已经无法正确部署了 因为有些东西版本升级了 版本跟不上就会报错 还有一种更加详细更加全面的部署方式 Docke
  • 搭建zookeeper集群的时候报: JAVA_HOME is not set and java could not be found in PATH.错误

    我在搭建zookeeper集群的时候总是报 JAVA HOME is not set and java could not be found in PATH 的错误 但是我的java环境是没问题的 这个问题困扰我两天了 终于解决了 在此记录
  • zookeeper3.4.6集群部署

    在安装Zookeeper之前 首先需要确保的就是主机名称 可选 hosts都已经更改 并且JDK成功安装 1 安装Zookeeper 使用命令 tar zxvf 命令将gz压缩文件解压 笔者Zookeeper的安装目录为 home Hado
  • flink-connector-jdbc_2.12 简介、中文文档、中英对照文档 下载

    flink connector jdbc 2 12 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 flink connector jdbc 2 12 1 14 3 jar flink c
  • Dubbo源码分析-服务导出源码解析(三)

    在这个版本中dubbo会通过注解 PostConstruct把ServiceBean实例放到ConfigManager中 public abstract class AbstractConfig implements Serializabl
  • 大数据—— Flink 的优化

    目录 一 Flink内存优化 1 1 Flink 内存配置 二 配置进程参数 2 1 场景 2 2 操作步骤 三 解决数据倾斜 3 1 场景描述 3 2 解决方式 3 2 1 数据源的消费不均匀 调整并发度 3 2 2 数据分布不均匀 四
  • flink学习44:基于行的操作分组和窗口的聚合

  • kafka配置内外网访问

    listeners 学名叫监听器 其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务 advertised listeners 和 listeners 相比多了个 advertised Advertised 的
  • 如何在 Flink 1.9 中使用 Hive?

    Flink on Hive 介绍 SQL 是大数据领域中的重要应用场景 为了完善 Flink 的生态 发掘 Flink 在批处理方面的潜力 我们决定增强 FlinkSQL 的功能 从而让用户能够通过 Flink 完成更多的任务 Hive 是
  • kafka的安装和使用

    ZooKeeper简介 ZooKeeper 是一个为分布式应用所设计的分布的 开源的 java 协调服务 分布式的应用可以建立在同步配置管理 选举 分布式锁 分组和命名等服务的更高级别的实现的基础之上 ZooKeeper 意欲设计一个易于编
  • 【基础】Flink -- ProcessFunction

    Flink ProcessFunction 处理函数概述 处理函数 基本处理函数 ProcessFunction 按键分区处理函数 KeyedProcessFunction 定时器与定时服务 基于处理时间的分区处理函数 基于事件时间的分区处
  • [分布式] zookeeper集群与kafka集群

    目录 一 Zookeeper 概述 1 1 Zookeeper定义 1 2 Zookeeper 工作机制 1 3 Zookeeper 特点 1 4 Zookeeper 数据结构 1 5 Zookeeper 应用场景 1 6 Zookeepe
  • 【Docker安装部署Kafka+Zookeeper详细教程】

    Docker安装部署Kafka Zookeeper Docker拉取镜像 Docker拉取zookeeper的镜像 docker pull zookeeper Docker拉取kafka的镜像 docker pull wurstmeiste
  • 微服务框架

    微服务框架 1 SOA思想 面向服务的架构 SOA 是一个组件模型 它将应用程序的不同功能单元 称为服务 进行拆分 并通过这些服务之间定义良好的接口和协议联系起来 接口是采用中立的方式进行定义的 它应该独立于实现服务的硬件平台 操作系统和编
  • Flink_05_状态(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 状态 状态就是一块内存 一个变量 如果要访问历史窗口 或批次 的数据
  • 终于找到了最新版的Zookeeper入门级教程,建议收藏!

    小熊学Java https javaxiaobear cn 1 分布式一致性 1 CAP 理论 CAP 理论指出对于一个分布式计算系统来说 不可能同时满足以下三点 一致性 在分布式环境中 一致性是指数据在多个副本之间是否能够保持一致的特性

随机推荐

  • 硬币组合问题python_关于硬币的python问题

    展开全部 coding utf8 import random def chkcoin acoin basecoin 1 5 10 25 flag False for bc in basecoin 62616964757a686964616f
  • php curl 带入cookie,PHP CURL中传递cookie的方法步骤

    curl的cookie怎么使用 新手都很头疼的 curl的参数太多了 其中cookie部分就涉及了4个 当然了 手册上明白写的curl的cookie是3个 但是嘛 不是还有个header的参数嘛 里面可以包含cookie curl非常的好用
  • chatgpt赋能python:Python文件转pyc文件详解

    Python文件转pyc文件详解 Python作为一门程力语言 在软件工程领域中独树一帜 但是Python解释器每次运行程序都会解释Python代码 这种运行方式会降低程序的运行速度 为了避免这种情况的发生 可以将Python文件编译成字节
  • air724UG + Luat玩转物联网(四) 定时器

    luat已经将定时器封装入sys模块 每创建一个任务就会消耗一个定时器 最大不能超过32个 一 luat定时器使用方法 1 sys timerStart fnc ms 开启一个定时器 参数 参数 释义 fnc fnc 定时器回调函数 ms
  • React项目 管理后台页面框架搭建

    使用 antd 这个框架搭建 使用 Layout 进行页面布局 在文件夹 component 创建一个新的组件 叫做Frame 然后里面在创建一个叫做index js 这是我们管理后台的一个大的布局结构 在index js 里添加代码 首先
  • 【拍照画面异常问题的 buffer dump和处理】

    当拍照遇到画面异常问题 建议先dump拍照对应的raw yuv和jpeg 一 Dump拍照对应的raw图 1 Non zsl拍照 Non zsl拍照会让P1node重新出raw图 而拍照会用到这些raw图中的imgo buffer 1 1
  • Pycharm设置终端自动进入当前python环境

    这里写自定义目录标题 设置Pycharm中的Powershell终端 powershell初始化 设置Pycharm中的Powershell终端 使用系统自带powershell的请忽略此步 在设置 工具 终端中设置默认powershell
  • 人生苦短,Python是岸——别了!Python之父!

    就在7月12日 著名的Python之父Guido van Rossum正式退出Python核心决策层 他在邮件里有点生气又有点伤心的写道 现在PEP 572已经完成 我不再想为一个PEP这么努力争取 而且还发现有这么多人鄙视我的决定 这个完
  • label+input 选择(优化多选按钮)及 input实现全选反选

    1 多选 选择之后不同的背景 input中 id和label中 for对应的值必须相同
  • Tomcat 8和10的安装和修改

    Tomcat10 jdk11没有jre目录了 tomcat安装后需要做一些修改 JAVA HOME usr local jdk11 JAVA BIN JAVA HOME bin export JAVA BIN JAVA HOME bin e
  • 全网最全系统学习爬虫教程,用爬虫进行数据分析(bs4,xpath,正则表达式)

    1 bs4解析基础 2 bs4案例 3 xpath解析基础 4 xpath解析案例 4k图片解析爬取 5 xpath解析案例 58二手房 6 xpath解析案例 爬取站长素材中免费简历模板 7 xpath解析案例 全国城市名称爬取 8 正则
  • jwt 非对称加密 密钥生成

    1 生成证书 有效期 100年 2 证书的名称 pubKey 3 证书生成需要的盐值 7018 z1 在java项目中使用rsa非得对称加密 只需要生成的 证书 pubKey jks以及生成的公钥 私钥一般用不到 如果加密和解密只需要公钥和
  • vs2017试用延长期已到_将Windows 7试用版从30天延长到120天

    vs2017试用延长期已到 Did you know that you can install Windows 7 without any license key and use it for 30 days What you might
  • STM32学习心得(二)点亮LED灯

    STM32学习心得 二 点亮LED灯 在创建好工程模板后 就可以开始真正进入STM32的学习 手下那当然是试着点亮一个LED灯 首先在USER目录下创建一个空文件夹 并命名为bsp led bsp的意思是板级支持包 即该代码仅支持这块板子
  • Git搭建个人博客

    Git搭建个人博客 很多人都有写博客的习惯 所以我这篇博客就讲解一下如何在git上搭建一个个人的博客 环境 搭建个人博客需要配置配置一下环境 这里我是使用win10来搭建的 因为像这种配置或者搭建东西 一般都是win系统比较麻烦 在mac和
  • Sqlilabs-16

    相较于第 15 关 单引号变成了双引号 括号 查列 uname admin and if ascii substr select group concat table name from information schema tables
  • bash: /root/.bashrc: 行 102: 语法错误: 未预期的文件结尾

    问题描述 解决方案 在添加内容的末尾加上fi
  • idea使用sonarlint插件

    JDH 邹老板 一 插件安装 由于是内网环境 根据自己安装的idea版本 去官网下载离线插件包进行离线安装 我的idea是IntelliJ IDEA 2020 2 3 安装包如下 二 sonarlint服务器配置 插件安装完成之后 在设置里
  • YaRN: Efficient Context Window Extension of Large Language Models

    本文是LLM系列文章 针对 YaRN Efficient Context Window Extension of Large Language Models 的翻译 YaRN 大型语言模型的有效上下文窗口扩展 摘要 1 引言 2 背景和相关
  • zookeeper版本选择与配置参数调优

    一 zookeeper 发布策略 Apache ZooKeeper 社区一次支持两个发布分支 stable和current ZooKeeper的稳定版本是 3 7 x 当前版本是 3 8 x 一旦发布新的次要版本 稳定版本预计将很快退役 大