一、安装zooleeper(linux,CentOS7)
1.去apache官网下载zookeeper压缩包
地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
切记不管下载什么版本,一定要下载带bin的压缩包,如图:
下载完成后,放到服务器中(目录自己指定),解压该文件
2.进行简单的配置
打开conf目录,如果没有zoo.cfg就新建一个,进行如下配置:(注意配置项6)
配置项4中的文件夹目录我们需要手动创建,例如:
mkdir -p /var/lib/zookeeper
#1.tickTime:Client-Server通信心跳时间
#Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,tickTime以毫秒为单位
tickTime=2000
#2.initLimit:Leader-Follower初始通信时限
#集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
#initLimit=5
#3.syncLimit:Leader-Follower同步通信时限
#集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)
#syncLimit=2
#4.dataDir:数据文件目录
#Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
dataDir=/var/lib/zookeeper
#5.clientPort:客户端连接端口
#客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
#6.admin.serverPort:zookeeper 3.5.0版本以上指定此参数,不指定则默认为8080.
#建议指定,因为亲测8080容易被占用,导致启动失败。
admin.serverPort=12222
#7.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
#这个配置项的书写格式比较特殊,规则如下:
#server.N=YYY:A:B
#7.maxClientCnxns:对于一个客户端的连接数限制,默认是60,这在大部分时候是足够了。
#但实际使用中发现,在测试环境经常超过这个数,
#经过调查发现有的团队将几十个应用全部部署到一台机器上,以方便测试,于是这个数字就超过了。
#maxClientCnxns=
#8.autopurge.snapRetainCount、autopurge.purgeInterval
#客户端与zookeeper交互过程中产生的日志,zookeeper会将内存中的数据作为snapshot保存下来
#这些数据不会自动删除,这样磁盘中这样的数据就会越来越多。
#autopurge.purgeInterval就是设置多少小时清理一次
#autopurge.snapRetainCount是设置保留多少个snapshot,之前的则删除。
#autopurge.purgeInterval=
#autopurge.snapRetainCount=
3.启动zookeeper
到bin目录下执行:
sh zkServer.sh start
4.测试启动是否成功
看到 Starting zookeeper ... STARTED 不一定代表启动成功,可以使用telnet测试。
telnet localhost 2181
telnet连接上,通过 srvr来验证是否安装正确
未连接上,代表启动失败。
5.启动失败错误排查
具体报错原因千变万化,在此不一一列举,建议大家养成启动后查看日志的习惯。
到/logs目录下可以查勘zookeeper从启动开始所有的运行时日志。
6.Zookeeper集群
Zookeeper集群被称为群组(不建议超过七个节点,节点过多会降低整个群组的性能),Zookeeper使用的是一致性协议,所以建议每个群组里应该包含奇数个节点(3,5,7,9)。因为只有大多数节点(法定人数)处于可用状态,Zookeeper才可以处理外部请求
也就是说,如果你有一个包含 3 个节点的群组,那么它允许1个节点失效。如果群组包含 5 个节点,那么它允许 2 个节点失效。
群组需要有一些公共配置,上面列出了所有服务器的清单,并且每个服务器还要在数据目录中创建一个 myid 文件,用于指明自己的 ID。如果群组里服务器的机器名是 zoo1.example.com、zoo2.example.com、zoo3.example.com,那么配置文件可能是这样的,
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=20
syncLimit=5
server.1=zoo1.example.com:2888:3888
server.2=zoo2.example.com:2888:3888
server.3=zoo3.example.com:2888:3888
服务器地址遵循 server.X=hostname:peerPort:leaderPort 格式:
- X:服务器的 ID,它必须是一个整数,不过不一定要从 0 开始,也不要求是连续的;
- hostname:服务器的机器名或 IP 地址;
- peerPort:用于节点间通信的 TCP 端口;
- leaderPort:用于首领选举的 TCP 端口
除了公共的配置文件外,每个服务器都必须在 data Dir 目录中创建一个叫作 myid 的文件,文件里要包含服务器 ID,这个 ID 要与配置文件里配置的 ID 保持一致。完成这些步骤后,就可以启动服务器,让它们彼此间进行通信了。
二、安装kafka
1.下载kafka安装包(解压即可)
官网:
百度云(简):https://www.jianshu.com/p/0da47d19ad3a
2.验证安装是否正确
创建并验证主题:
/bin/kafka-topics.sh --create --zookeeper localhost:2181
往测试主题上发布消息:
/bin/kafka-console-producer.sh --broker-list
从测试主题上读取消息:
/bin/kafka-console-consumer.sh --zookeeper
三、broker配置
1.常规配置
- broker.id:每个 broker 需要有一个标识符,使用 broker.id 表示,默认是0,可设置任意整数。这个值在整个集群中必须是唯一的。建议设置为与机器名具有相关性的整数。
- port:默认情况下监听9092端口。(使用1024以下的端口,需要使用root权限启动kafka,不推荐)
- zookeeper.connect:用于保存broker元数据的Zookeeper地址。localhost:2181 表示这个 Zookeeper 是运行在本地的 2181 端口上。该配置参数是用冒号分隔的一组 hostname:port/path 列表,每一部分的含义如下
- hostname 是 Zookeeper 服务器的机器名或 IP 地址
- port 是 Zookeeper 的客户端连接端口
- /path 是可选的(不存在自动创建) Zookeeper 路径,作为 Kafka 集群的 chroot 环境。如果不指定,默认使用根路径
- log.dirs(一组用逗号分隔的本地文件系统路径):kafka把消息保存在磁盘,存放日志片段的目录。
- 如果指定了多个路径,那么 broker 会根据“最少使用”原则,把同一个分区的日志片段保存到同一个路径下。要注意broker 会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区。
- num.recovery.threads.per.data.dir:对于如下 3 种情况,Kafka 会使用可配置的线程池来处理日志片段:
- 服务器正常启动,用于打开每个分区的日志片段;
- 服务器崩溃后重启,用于检查和截短每个分区的日志片段;
- 服务器正常关闭,用于关闭日志片段。
- auto.create.topics.enable:默认情况下,Kafka 会在如下几种情形下自动创建主题
- 当一个生产者开始往主题写入消息时
- 当一个消费者开始从主题读取消息时
- 当任意一个客户端向主题发送元数据请求时
- 显式地创建主题把 auto.create.topics.enable 设为 false
2.默认配置
- num.partitions(默认为1):指定新创建的主题包含几个分区,默认启用。
- log.retention.ms(默认168 小时,也就是一周):根据此时间决定数据保存多久
- log.retention.bytes():通过最多可以保留的消息字节数来判断消息是否过期
- log.segment.bytes(默认是 1GB):当日志片段大小达到 log.segment.bytes 指定的上限时,当前日志片段就会被关闭,一个新的日志片段被打开。
- message.max.bytes(默认是 1M):限制单个消息的大小,这个值对性能有显著的影响
3.硬件选择
- 磁盘吞吐量
- 容量
- 内存
- 网络
- CPU
4.Kafka集群
- 最大的好处是可以跨服务器进行负载均衡。
- 再则就是可以使用复制功能来避免因单点故障造成的数据丢失。
- 在维护 Kafka 或底层系统时,使用集群可以确保为客户端提供高可用性。
需要多少个broker
- 需要多少磁盘空间来保留数据,以及单个 broker 有多少空间可用 例如:10/2
- 考虑集群处理请求的能力
broker配置
- 所有broker都必须配置相同的zookeeper.connect
- 每个broker都必须设置唯一的broker.id