Fafka集群+Zookeeper集群

前言

      • 系统环境
      • 下载与解压安装包
      • 部署zookeeper集群
      • 配置zookeeper自启脚本的方法
      • Fakfa集群部署
      • 验证环境

系统环境

20.0.0.21
20.0.0.22
20.0.0.23

下载与解压安装包

20.0.0.21,20.0.0.22,20.0.0.23全部操作:
kafka
官网地址:http://kafka.apache.org/downloads/
下载地址:wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.1/kafka_2.13-2.7.1.tgz

zookpeer
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

su - root
cd /u-data
mkdir -p /u-data/kafka-zookeeper/kafka/data
mkdir -p /u-data/kafka-zookeeper/kafka/logs
mkdir -p /u-data/kafka-zookeeper/zookeeper/data
mkdir -p /u-data/kafka-zookeeper/zookeeper/logs

tar zxvf kafka_2.13-2.7.1.tgz
tar zxf apache-zookeeper-3.6.3-bin.tar.gz

部署zookeeper集群

修改zookeeper配置文件
cd /u-data/apache-zookeeper-3.6.3-bin/conf/
cp zoo_sample.cfg zoo.cfg
[root@localhost u-data]# vim /u-data/apache-zookeeper-3.6.3-bin/conf/zoo.cfg
#对于从节点最初连接到主节点时的超时时间,单位为tick值的倍数
tickTime=2000
initLimit=10
#对于主节点与从节点进行同步操作时的超时时间,单位为tick值的倍数
syncLimit=5
#用于配置内存数据库保存的模糊快照的目录,目录需要单独创建
dataDir=/u-data/kafka-zookeeper/zookeeper/data
#用于存放日志信息,目录需要单独创建
dataLogDir=/u-data/kafka-zookeeper/zookeeper/logs
#客户端所连接的服务器所监听的端口号
clientPort=2181
###定时清理zookeeper日志配置
#清理频率单位是小时需要大于1的整数
autopurge.purgeInterval=24
##日志保留文件数目
autopurge.snapRetainCount=10
###集群信息
server.0=20.0.0.21:3188:3288
server.1=20.0.0.22:3188:3288
server.2=20.0.0.23:3188:3288
###注释
#server.1         #1表示zookeeper节点的id这个需要与myid对应必须一样
#20.0.0.21    #zookeeper节点所在机器的ip地址
#3188             #zookeeper节点非选举通讯端口
#3288             #zookeeper节点间选举通讯端口


#集群模式下需要新增一个名叫myid的文件,这个文件放在上述dataDir指定的目录下,这个文件里面就只有一个数据,就是配置文件中server.x的这个x(1,2,3)值,zookeeper启动时会读取这个文件,拿到里面的数据与zoo.cfg 里面的配置信息比较从而判断到底是那个server(节点)。

20.0.0.21的操作
[root@localhost u-data]# echo '0' > /u-data/kafka-zookeeper/zookeeper/data/myid
20.0.0.22的操作
[root@localhost u-data]# echo '1' > /u-data/kafka-zookeeper/zookeeper/data/myid
20.0.0.23的操作
[root@localhost u-data]# echo '2' > /u-data/kafka-zookeeper/zookeeper/data/myid

所有节点启动zook
[root@localhost conf]# /u-data/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /u-data/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

查看集群状态:
/u-data/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status
Mode: leader     为master
Mode: follower   为slave

验证集群功能:
/u-data/apache-zookeeper-3.6.3-bin/bin/zkCli.sh -server 20.0.0.21:2181
回车
[zk: 20.0.0.21:2186(CONNECTED) 1] ls /
[zookeeper]
Ctrl+c退出

配置zookeeper自启脚本的方法

[root@localhost conf]# cd /etc/init.d
[root@localhost system]# vim zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
#export JAVA_HOME=/usr/local/JAVA  ##重新安装的java环境的话要填写
case $1 in
          start) su root /u-data/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start;;
          stop) su root /u-data/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop;;
          status) su root /u-data/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status;;
          restart) su root /u-data/apache-zookeeper-3.6.3-bin/bin/zkServer.sh restart;;
          *)  echo "require start|stop|status|restart"  ;;
esac

[root@localhost init.d]# chmod +x zookeeper 

接下来我们加入开机自启:
chkconfig --add zookeeper
chkconfig zookeeper on
chkconfig --list
zookeeper      	0:off	1:off	2:on	3:on	4:on	5:on	6:off

Fakfa集群部署

KAFKA集群安装步骤:
【关于kafka内外网访问】https://www.cnblogs.com/xuewenlong/p/14379007.html

cd /u-data/kafka_2.13-2.7.1/config/

[root@localhost config]# vim server.properties
21    broker.id=21     ##每一个broker在集群中要求唯一,所以三个节点为212222

#EXTERNAL代表外网访问地址,INTERNAL代表内网访问地址,可以查看上面的博客
31    listeners=PLAINTEXT://20.0.0.21:9092   #节点的IP区分开来

#配置监听者的安全协议
32    stener.security.protocol.map=EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT
33    inter.broker.listener.name=INTERNAL

下面两个参数一个用于接收并处理网络请求的线程数,默认为3。其内部实现是采用Selector模型。启动一个线程作为Acceptor来负责建立连接,再配合启动num.network.threads个线程来轮流负责从Sockets里读取请求,一般无需改动,除非上下游并发请求量过大。一般num.network.threads主要处理网络io,读写缓冲区数据,基本没有io等待,配置线程数量为cpu核数加1.num.io.threads主要进行磁盘io操作,高峰期可能有些io等待,因此配置需要大些。配置线程数量为cpu核数2倍,最大不超过3.
#broker处理消息的最大线程数,最好配置成CPU核数
44    num.network.threads=1

#配置成CPU核数的2倍,一般不超过3
47    num.io.threads=2
125   zookeeper.connect=20.0.0.21:2181,20.0.0.22:2181,20.0.0.23:2181   ##zookeeper集群的地址
128   zookeeper.connection.timeout.ms=18000                            ##ZooKeeper的连接超时时间

#
136   group.initial.rebalance.delay.ms=0

#kafka数据的存放地址,多个地址的话用逗号分割,多个目录分布在不同磁盘上可以提高读写性能  #比如:/data/kafka-logs-1/data/kafka-logs-2
62    log.dirs=/u-data/kafka-zookeeper/kafka/logs

【以下为可选项】:
#一些后台任务处理的线程数,例如过期消息文件的删除等,一般情况下不需要去做修改
64    background.threads =4

#等待IO线程处理的请求队列最大数,若是等待IO的请求超过这个数值,那么会停止接受外部消息,应该是一种自我保护机制。
65    queued.max.requests =500

#socket的发送缓冲区,socket的调优参数SO_SNDBUFF
50    socket.send.buffer.bytes=102400
#socket的接受缓冲区,socket的调优参数SO_RCVBUFF
53    socket.receive.buffer.bytes=8388608
#socket请求的最大数值,防止serverOOM,message.max.bytes必然要小于socket.request.max.bytes,会被topic创建时的指定参数覆盖
56    socket.request.max.bytes=104857600

#每个topic的分区个数,若是在topic创建时候没有指定的话会被topic创建时的指定参数覆盖
69    num.partitions=18
73    num.recovery.threads.per.data.dir=1

#是否允许自动创建topic,若是false,就需要通过命令创建topic
75    default.replication.factor=3

#log文件”sync”到磁盘之前累积的消息条数,因为磁盘IO操作是一个慢操作,但又是一个”数据可靠性"的必要手段,所以此参数的设置,需要在"数据可靠性"与"性能"之间做必要的权衡.如果此值过大,将会导致每次"fsync"的时间较长(IO阻塞),如果此值过小,将会导致"fsync"的次数较多,这也意味着整体的client请求有一定的延迟.物理server故障,将会导致没有fsync的消息丢失.
95    log.flush.interval.messages=10000

#仅仅通过interval来控制消息的磁盘写入时机,是不足的.此参数用于控制"fsync"的时间间隔,如果消息量始终没有达到阀值,但是离上一次磁盘同步的时间间隔达到阀值,也将触发.
98    log.flush.interval.ms=1000

#日志清理策略选择有:delete和compact主要针对过期数据的处理,或是日志文件达到限制的额度,会被 topic创建时的指定参数覆盖
100   log.cleanup.policy=delete

#数据文件保留多长时间, 存储的最大时间超过这个时间会根据log.cleanup.policy设置数据清除策略log.retention.bytes和log.retention.minutes或log.retention.hours任意一个达到要求,都会执行删除
110   log.retention.hours=72

#topic的分区是以一堆segment文件存储的,这个控制每个segment的大小,会被topic创建时的指定参数覆盖
117   log.segment.bytes=1073741824

#文件大小检查的周期时间,是否使用log.cleanup.policy中设置的策略
121   log.retention.check.interval.ms=300000


启动kafka:
/u-data/kafka_2.13-2.7.1/bin/kafka-server-start.sh -daemon /u-data/kafka_2.13-2.7.1/config/server.properties
[root@localhost bin]# ps -ef | grep kafka

配置kafka自启动脚本【systemctl】:没有验证过,安装时请验证
[root@localhost init.d]# pwd
/etc/init.d
[root@localhost init.d]# vim kafka 
#!/bin/bash
#chkconfig:2345 60 20
#description:kafka

#export JAVA_HOME=/usr/java/jdk1.8.0_172  ##如果新安装java,申明java环境
KAFKA_HOME=/u-data/kafka_2.13-2.7.1
case $1 in
        start) su root ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties;;
        stop) su root ${KAFKA_HOME}/bin/kafka-server-stop.sh;;
        status)
            count=$(ps -ef |grep kafka |egrep -cv "grep|$$")

             if [ "$count" -eq 0 ];then
                ehco "kafka is not running"
             else
                echo "kafka is running"
             fi
         ;;
        restart)
           su root ${KAFKA_HOME}/bin/kafka-server-stop.sh
           su root ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties
         ;;
        *) echo "require start|stop" ;;
esac

设置开机自启:
chkconfig --add kafka
chkconfig kafka on
chkconfig --list
kafka 0:off	1:off	2:on	3:on	4:on	5:on	6:off




#环境变量
[root@localhost bin]# vim /etc/profile
export PATH=$PATH:/u-data/kafka_2.13-2.7.1/bin
[root@localhost bin]# source /etc/profile

验证环境

测试kafka,20.0.0.21操作即可:
##创建topic
[root@localhost bin]# kafka-topics.sh --create --zookeeper 20.0.0.21:2181,20.0.0.22:2181,20.0.0.23:2181 --replication-factor 1 --partitions 1 --topic test
Created topic test.

--zookeeper:为zk服务器地址,已逗号分割配置多个 
--replication-factor:分区leader副本数,1代表没有副本即分区本身,建议为2 
--partitions:分区数 
--topic:topic名称

##查看topic
[root@localhost bin]# kafka-topics.sh --list --zookeeper 20.0.0.21:2181,20.0.0.22:2181,20.0.0.23:2181
test

查看test topic消息
[root@localhost bin]# kafka-topics.sh  --describe --zookeeper 20.0.0.21:2181,20.0.0.22:2181,20.0.0.23:2181 --topic test
Topic: test	PartitionCount: 1	ReplicationFactor: 1	Configs: 
	Topic: test	Partition: 0	Leader: 21	Replicas: 21	Isr: 21

#leader:负责处理消息的读和写,leader是从所有节点中随机选择的.
#Replicas:列出了所有的副本节点,不管节点是否在服务中.
#Lsr:是正在服务中的节点.

##发布消息
kafka-console-producer.sh --broker-list 20.0.0.21:9092 --topic test
1
2
3
4

##消费消息,新开一个20.0.0.21
kafka-console-consumer.sh --bootstrap-server 20.0.0.21:9092 --topic test --from-beginning
1
2
3
4

##删除topic
[root@localhost bin]# kafka-topics.sh --delete --zookeeper 20.0.0.21:2181,20.0.0.22:2181,20.0.0.23:2181 --topic test
Topic test is marked for deletion

你可能感兴趣的:(kafka)