1. 软件版本
线上版本:
zookeeper: zookeeper-3.7.1
kakfa: kafka_ 2.12-3.0.0
2. Kafka安装
安装JDK1.84. 安装部署
说明:服务都已安装好,确认服务器自启动是否正常
2.1 zookeeper安装
1)下载相应版本,解压即可
mirrors.tuna.tsinghua.edu.cn/apache/zook…
2)配置
vi conf/zoo.cfg
参数说明:
tickTime=2000客户端与服务器或者服务器与服务器之间维持心跳时间
initLimit=10集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数
syncLimit=5集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数
dataDir存放myid信息跟一些版本,日志,跟服务器唯一的ID信息
dataLogDir日志存放路径,(需修改启动脚本)clientPort服务端口server.1集群信息
3)zookeeper启停
停止: ./bin/zkServer.sh stop
启动: ./bin/zkServer.sh start
2.2 kafka安装
1)下载相应版本,解压即可
2)配置
vi config/server.properties
参数说明:
broker.id =0每一个broker在集群中的唯一表示,要求是正数
log.dirs=/data/kafka-logskafka数据的存放地址
port =9092broker server服务端口
message.max.bytes =6525000表示消息体的最大大小,单位是字节
num.network.threads =4broker处理消息的最大线程数,一般情况下数量为cpu核数
num.io.threads =8broker处理磁盘IO的线程数,数值为cpu核数2倍
background.threads =4一些后台任务处理的线程数,例如过期消息文件的删除等,一般情况下不需要去做修改
queued.max.requests =500等待IO线程处理的请求队列最大数,若是等待IO的请求超过这个数值,那么会停止接受外部消息,应该是一种自我保护机制host.namebroker的主机地址socket.send.buffer.bytes=100*1024socket的发送缓冲区,
socket的调优参数SO_SNDBUFF
socket.receive.buffer.bytes =100*1024socket的接受缓冲区,
socket的调优参数SO_RCVBUFF
socket.request.max.bytes =10010241024socket请求的最大数值,防止serverOOM,message.max.bytes必然要小于socket.request.max.bytes,会被topic创建时的指定参数覆盖delete.topic.enable=true是否彻底删除Topic5. 启停方法
3)kafka启停
停止: ../bin/kafka-server-stop.sh
启动: ./bin/kafka-server-start.sh -daemon config/server.properties6. 集群配置
3. Kafka集群配置
1)配置zookeeper集群(3台为例)
a)vi conf/zoo.cfg
添加集群机器信息
server.1=172.26.1.247:2181
server.2=172.26.1.247:2182
server.3=172.26.1.247:2183
b)每台机器上生成响应的id文件(不能重复)
server1上执行: echo "1" > /home/appadmin/kafka/data/myid
server2上执行: echo "2" > /home/appadmin/kafka/data/myid
server3上执行: echo "3" > /home/appadmin/kafka/data/myid
c)重启zookeeper服务
停止 ./bin/zkServer.sh stop
启动:./bin/zkServer.sh start
检查集群状态:./bin/zkServer.sh status 可以查看节点的模式,分为follower与leader
2)配置kafka集群
a)vi config/server.properties
添加zookeeper集群机器信息
zookeeper.connect=172.26.1.247:2181, 172.26.1.247:2182, 172.26.1.247:2183
zookeeper.connection.timeout.ms=400000
修改broker.id(每台机器的id不能重复)
broker.id=20
b)重启kafka服务
停止 bin/kafka-server-stop.sh
启动 bin/kafka-server-start.sh -daemon config/server.properties
c)测试集群
消费者服务器查看到数据则集群配置完成
3)配置优化
num.io.threads=8 --broker io处理的线程数,这个数量一定要比log.dirs的目录数要大
The send buffer (SO_SNDBUF) used by the socket server
socket.send.buffer.bytes=1048576 --将发送的消息先放到缓冲区,当到达一定量的时候再一次性发出
The receive buffer (SO_RCVBUF) used by the socket server
socket.receive.buffer.bytes=1048576 --kafka接受消息的缓冲区,当接受的数量达到一定量的时候再写入磁盘
为了减少磁盘写入的次数,broker会将消息暂时buffer起来,当消息的个数(或尺寸)达到一定阀值时,再flush到磁盘,这样减少了磁盘IO调用的次数。
The maximum size of a request that the socket server will accept (protection against OOM)
socket.request.max.bytes=104857600 --像kafka发送或者请求消息的最大数,此设置不能超过java堆栈大小
4. Kafka常用命令
1)创建一个topic
sh kafka-topics.sh --create --topic tyjt-test1 --bootstrap-server 172.26.1.246:9092 --replication-factor 1 --partitions 1
2)查看topic
sh kafka-topics.sh --list --bootstrap-server 172.26.1.246:9092 --topic tyjt-test
3)查看topic
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test
4)删除topic
sh kafka-topics.sh --delete --bootstrap-server 172.26.1.246:9092 --topic tyjt-test1
删除topic:慎用,只会删除zookeeper中的元数据,消息文件须手动删除
5)列出所有主题中的所有用户组
./kafka-consumer-groups.sh --bootstrap-server 172.26.1.246:9092 –list
要使用ConsumerOffsetChecker查看上一个示例中消费者组的偏移量
./kafka-consumer-groups.sh --bootstrap-server 172.26.1.246:9092 --describe --group lushijie3
6)修改partitions数量
kafka-topics.sh --bootstrap-server 172.26.1.246:9092 --topic tyjt-test --alter --partitions 4
7)模拟生产者
sh kafka-console-producer.sh --broker-list 172.26.1.246:9092 --topic tyjt-test
8)模拟消费者
sh kafka-console-consumer.sh --bootstrap-server 172.26.1.246:9092 --topic tyjt-test
可以看到当前的消费进度(CURRENT-OFFSET)、消息进度(LOG-END-OFFSET)、落后量(LAG):
./kafka-consumer-groups.sh --bootstrap-server 172.26.1.246:9092 --describe --group lushijie3