目录
1/Zookeeper配置文件详解
2/kafka配置文件参数详解
3/生产环境 zk 与 kafka 配置文件备注
4/kafka命令详解

1/安装完zookeeper 对其配置文件详解 zookeeper-3.4.14.tar.gz
在安装zookeeper的时候我们要去修改zookeeper预装是conf目录下面的zoo_sample.cfg这个文件,首先我们要做的事就是重命名这个文件
[hadoop@kafka01-55-11 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@kafka01-55-11 conf]$ grep '^[a-Z]' zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
//以上是默认的配置文件参数
预装的zoo.cfg下面默认有五个属性,他们分别是:1.tickTime,2.initLimit,3.syncLimit,4.dataDir,5.clientPort

[hadoop@tencent-kafka01-39-110 conf]$ cat zoo.cfg 
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/data/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60                                           # 如果您需要处理更多客户端,请增加此值
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3                               # 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1                                  #这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是1,
server.1=10.9.39.110:2888:3888
server.2=10.9.139.65:2888:3888
server.3=10.9.35.206:2888:3888
server.4=10.9.88.40:2888:3888
server.5=10.9.74.126:2888:3888
autopurge.snapRetainCount=20
autopurge.purgeInterval=5

默认情况,tickTime=2sec,那么minSessionTimeout 和 maxSessionTimeout 分别是4sec和40sec

解释如下:


[hadoop@kafka01-55-11 conf]$ cat zoo_sample.cfg         //zk默认必须参数配置如下
# The number of milliseconds of each tick
tickTime=2000                                           # tick翻译成中文的话就是滴答滴答的意思,连起来就是滴答滴答的时间,寓意心跳间隔,单位是毫秒,系统默认是2000毫秒 ,也就是间隔两秒心跳一次。 tickTime的意义:客户端与服务器或者服务器与服务器之间维持心跳,也就是每个tickTime时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制Flower跟Leader的通信时间,默认情况下FL的会话时常是心跳间隔的两倍。
# synchronization phase can take 
initLimit=10                                            # 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
                                                        # clickhouse 官方文档使用zk 这个   initLimit=30000 
# The number of ticks that can pass between             #可以在两者之间传递的滴答数
# sending a request and getting an acknowledgement      #发送请求并获得确认
syncLimit=5                                             # 集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数。 
                                                        # clickhouse官方给出的 syncLimit=10
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper                                  # 该属性对应的目录是用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等。
# the port at which the clients will connect
clientPort=2181                                    # 客户端连接的接口,客户端连接zookeeper服务器的端口,zookeeper会监听这个端口,接收客户端的请求访问!这个端口默认是2181。
# the maximum number of client connections.         # 最大客户端连接数。
# increase this if you need to handle more clients
#maxClientCnxns=60                                   # 如果您需要处理更多客户端,请增加此值 clickhouse官方用的zk中 这个值为2000 
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir          # 要在dataDir中保留的快照数
#autopurge.snapRetainCount=3                       # 这个参数和下面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。 clickhouse指定这个值为10                                                         #保留10个文件
# Purge task interval in hours
# Set to "0" to disable auto purge feature         #设置为“0”以禁用自动清除功能
#autopurge.purgeInterval=1                        # 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是1,
解释
//autopurge.purgeInterval  这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是1,
//autopurge.snapRetainCount 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
//默认情况,tickTime=2sec,那么minSessionTimeout 和 maxSessionTimeout 分别是4sec和40sec  

默认参数中没有 maxSessionTimeout=90000    # minSessionTimeout, maxSessionTimeout:一般,客户端连接zookeeper的时候,都会设置一个session timeout,如果超过这个时间client没有zookeeper server有联系,则这个session被设置为过期(如果这个session上有临时节点,则会被全部删除),但是这个时间不是客户端可以无限设置的,服务器可以设置这两个参数来限制客户端设置的范围。                               15分钟
# clickhouse官方建议  maxSessionTimeout = 60000000       1000分钟  所有,我们可以考虑调大此参数值
zookeeper 的扩展配置 高级配置项:
globalOutstandingLimit : 这个配置指定了等待处理的最大请求数量的限制(zookeeper.globalOutstandingLimit)。
client发送请求的速度可能会比server端处理的速度快,会导致请求在server端排队,最终(在若干秒内)会使server的内存耗尽。为了避免这一点,如果等待的请求数量达到了globalOutstandingLimit,server端会拒绝client的请求。但是这个限制不是hard限制。每一个client至少能有一个outstanding请求,否则连接会开始出现超时。所以,当达到globalOutstandingLimit之后,只有在没有任何的pending请求时,server才会从client连接读取数据。
为了决定某一台确定的server的限制,可以简单的用这个配置项的值除以server的数量。现在没有一种聪明的方式来决定这个值来进行限制,总的说来,这个配置项的值就是outstanding请求的上限。实际上,负载无法在server间进行均衡,总有一些server的负载会高一些,即使没有达到上限。
默认的限制为1000个请求。通常不需要改变这个配置,如果有很多client会发送非常大的请求,你需要调低这个值,但是在实践中通常不需要改变这个值。

maxClientCnxns: 决定了每个IP地址可以发起的socket连接个最大个数。
ZooKeeper使用了flow control和limit来避免连接过载。建立连接消耗的资源远远超过普通的操作消耗的资源。一瞬间过多的请求会造成拒绝服务的问题,所以加上了这个限制,当某个IP的连接超过了这个限制,server会拒绝连接。默认值为60。 建议 100
clientPortAddress: 默认server会监听所有的网络接口提供client来连接。有一些服务器会有多个网络接口,通常一些为内网接口一些为外网接口。如果不想开放外网接口,可以将此配置项设为内网接口。
minSessionTimeout: 这是session过期的最小超时时间,单位为毫秒。当client发起连接时,它会请求一个特定的超时时间,但是实际的超时时间并能小于这个配置项。
开发者喜欢立即并准确的检测到client端的失败。但不幸的是,系统不能实时的检测到,实际上是使用心跳和超时来做的。超时的使用依赖于client端和server端的网络延迟和可靠性。超时时间必须至少等于网络的round trip time,但是偶尔会有丢包的情况,在这种情况下接收响应的时间会增加,因为会发送发送丢失的包。
默认minSessionTimeout是tickTime的2倍。把这个值设置得过低的话会导致错误的检测client的失败。设置得太高的话会导致检测client的失败的延迟。  //一般不要考虑此参数
maxSessionTimeout:这是最大的session超时时间,单位为毫秒。当client发起连接时,它会请求一个特定的超时时间,但是实际的超时时间并能大于这个配置项。
尽管这个配置不会影响系统性能,但会限制client消耗系统资源的时间。默认是tickTime的20倍。   tickTime=2s  maxSessionTimeout=40s默认 我们生产配置设置成 90s
preAllocSize:
对应的Java系统属性:zookeeper.preAllocSize。
用于配置ZooKeeper事务日志文件预分配的磁盘空间大小。默认的块大小是64M。改变块大小的其中一个原因是当数据快照文件生成比较频繁时可以适当减少块大小。比如 1000次事务会新产生一个快照(参数为snapCount),新产生快照后会用新的事务日志文件,假设一个事务信息大小100b,那么事务日志预分配的磁盘空间大小为100kb会比较好。
// clickhouse 官方给定的值为 preAllocSize = 131072
snapCount
对应的Java系统属性:zookeeper.snapCount。
ZooKeeper 将事务记录到事务日志中。当 snapCount 个事务被写到一个日志文件后,启动一个快照并创建一个新的事务日志文件。snapCount 的默认值是 100,000
// clickhouse 官方给的值为 snapCount = 3000000
leaderServes
对应的Java系统属性:zookeeper.leaderServes。
用于配置Leader是否接受客户端连接,默认值是“yes”,即Leader将会接受客户端连接。在ZooKeeper中,Leader服务器主要协调事务更新请求。对于事务更新请求吞吐很高而读取请求吞吐很低的情况可以配置Leader不接受客户端连接,这样就可以专注于协调工作。
注意:当ZooKeeper集群中服务器的数量超过3个时,建议开启Leader选举。
// clickhouse 官方配置文件为  leaderServes=yes 默认是开启的

ZooKeeper的配置文件优化性能(转) https://www.cnblogs.com/EasonJim/p/7488834.html  
// 此链接参数 很重要,很详细

这里有一个坑,就是
server.1=10.2.10.174:2888:3888 //这里要写IP 不要写成server.1=emm-kafka01-10--174:2888:3888
为什么呢?
写主机名,zk能起来,kafka也能起来,但是kafka他去解析ZK的时候,他不通过etc/hosts 以后会出问题
这里面,我们就用IP,这里注意下

(其中2181代表:客户端与服务器连接所用的端口)
(其中2888代表:leader与follower之间的通信用的端口)
(其中3888代表:follower之间选举投票用的端口)

zookeeper的配置参数详解(zoo.cfg)  https://www.orchome.com/1419     不错
#################################################################
grep '^[a-Z]' zoo.cfg          
tickTime=2000                      # tick翻译成中文的话就是滴答滴答的意思,连起来就是滴答滴答的时间,寓意心跳间隔,单位是毫秒,系统默认是2000毫秒 ,也就是间隔两秒心跳一次。
tickTime的意义:客户端与服务器或者服务器与服务器之间维持心跳,也就是每个tickTime时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制Flower跟Leader的通信时间,默认情况下FL的会话时常是心跳间隔的两倍。
initLimit=10                       # 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
//白话:Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在initLimit时间内完成这个工作。
syncLimit=5                        # 集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数。
//白话:在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。
dataDir=/data/zookeeper/dataDir     # 该属性对应的目录是用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等。
clientPort=2181                     # 客户端连接的接口,客户端连接zookeeper服务器的端口,zookeeper会监听这个端口,接收客户端的请求访问!这个端口默认是2181。
maxSessionTimeout=90000            # minSessionTimeout, maxSessionTimeout:一般,客户端连接zookeeper的时候,都会设置一个session timeout,如果超过这个时间client没有zookeeper server有联系,则这个session被设置为过期(如果这个session上有临时节点,则会被全部删除),但是这个时间不是客户端可以无限设置的,服务器可以设置这两个参数来限制客户端设置的范围。                               15分钟
maxClientCnxns=60                  # 如果您需要处理更多客户端,请增加此值
server.1=10.9.39.110:2888:3888
server.2=10.9.139.65:2888:3888
server.3=10.9.35.206:2888:3888
server.4=10.9.88.40:2888:3888
server.5=10.9.74.126:2888:3888
autopurge.snapRetainCount=20        #保留20个文件
autopurge.purgeInterval=5           #保留5小时内的日志    
//此处我们的配置就是:保留5小时内的日志,并且保留20个文件        建议在生产上 设置成 保留48小时 并且保留20个文件 我们线上保留的是 5小时
//autopurge.purgeInterval  这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是1,
//autopurge.snapRetainCount 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
//默认情况,tickTime=2sec,那么minSessionTimeout 和 maxSessionTimeout 分别是4sec和40sec 
#################################################################