zookeeper及kafka伪集群部署

文章目录

  • 一、Zookeeper 集群搭建
    • 1.1 下载二进制包
    • 1.2 zookeeper服务配置文件修改
    • 1.3 创建文件夹及myid
    • 1.4 启动zookeeper集群
  • 二、Kafka 集群搭建
    • 2.1 下载二进制包
    • 2.2 kafka服务配置文件修改
    • 2.3 启动kafka集群
  • 三、测试集群是否可用

一、Zookeeper 集群搭建

1.1 下载二进制包

  • 下载Zookeeper二进制包
# cd /opt/tools
# wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
  • 解压Zookeeper二进制包
tar zxvf apache-zookeeper-3.5.8-bin.tar.gz
  • 放到服务安装目录下
cp apache-zookeeper-3.5.8-bin /opt/app/zookeeper-1 -rf
cp apache-zookeeper-3.5.8-bin /opt/app/zookeeper-2 -rf
cp apache-zookeeper-3.5.8-bin /opt/app/zookeeper-3 -rf

注:因为我们需要在同一台服务器中部署一个Zookeeper集群(3个节点),所以需要复制三个zookeeper目录出来

1.2 zookeeper服务配置文件修改

  • 节点1
# cd /opt/app/zookeeper-1/conf/
# cp zoo_sample.cfg zoo.cfg

# vim zoo.cfg

# zookeeper服务器心跳时间,单位为ms
tickTime=2000
# 投票选举新leader的初始化时间
initLimit=10
# leader与follower心跳检测最大容忍时间,响应超过 syncLimit * tickTime,leader认为follower死掉,从服务器列表删除follower
syncLimit=5
# 数据目录
dataDir=/opt/data/zk1/data
# 日志目录
dataLogDir=/opt/data/zk1/logs
# 对外服务的端口
clientPort=2181
server.1=10.1.3.85:2881:3881
server.2=10.1.3.85:2882:3882
server.3=10.1.3.85:2883:3883

注:上面配置文件中的数据目录和日志目录需自行去创建对应的文件夹。这里server后的数字,与myid文件中的id是一致的。

zookeeper启动会占用三个端口,分别的作用是:

2181:对cline端提供服务
3881:选举leader使用
2881:集群内机器通讯使用(Leader监听此端口)

  • 节点2
# cd /opt/app/zookeeper-2/conf/
# cp zoo_sample.cfg zoo.cfg

# vim zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/data/zk2/data
dataLogDir=/opt/data/zk2/logs
clientPort=2182
# 集群ip配置
server.1=10.1.3.85:2881:3881
server.2=10.1.3.85:2882:3882
server.3=10.1.3.85:2883:3883

  • 节点3
# cd /opt/app/zookeeper-3/conf/
# cp zoo_sample.cfg zoo.cfg

# vim zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/data/zk3/data
dataLogDir=/opt/data/zk3/logs
clientPort=2183
# 集群ip配置
server.1=10.1.3.85:2881:3881
server.2=10.1.3.85:2882:3882
server.3=10.1.3.85:2883:3883

1.3 创建文件夹及myid

  • 创建三个节点的数据目录及日志目录
mkdir -p /opt/data/{zk1,zk2,zk3}/{data,logs}
  • 创建三个节点的myid
echo 1 >> /opt/data/zk1/data/myid
echo 2 >> /opt/data/zk2/data/myid
echo 3 >> /opt/data/zk3/data/myid

1.4 启动zookeeper集群

  • 启动zookeeper集群中的三个节点
/opt/app/zookeeper-1/bin/zkServer.sh start
/opt/app/zookeeper-2/bin/zkServer.sh start
/opt/app/zookeeper-3/bin/zkServer.sh start
  • zookeeper集群中的三个节点进程是否存在
# jps -l|grep zookeeper
98315 org.apache.zookeeper.ZooKeeperMain
71854 org.apache.zookeeper.server.quorum.QuorumPeerMain
71772 org.apache.zookeeper.server.quorum.QuorumPeerMain
71007 org.apache.zookeeper.server.quorum.QuorumPeerMain
  • zookeeper集群中的三个节点启动状态查看
# 节点1
# /opt/app/zookeeper-1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/app/zookeeper-1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

# 节点2
# /opt/app/zookeeper-2/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/app/zookeeper-2/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost.
Mode: follower

# 节点3
# /opt/app/zookeeper-3/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/app/zookeeper-3/bin/../conf/zoo.cfg
Client port found: 2183. Client address: localhost.
Mode: leader

以上可获取每一台zk的Mode信息(leader,follower)leader:为领导者 follower:追随者

一个时候只有一台leader提供对外服务

二、Kafka 集群搭建

2.1 下载二进制包

  • 下载Kafka二进制包
# cd /opt/tools
# wget https://archive.apache.org/dist/kafka/2.6.0/kafka_2.12-2.6.0.tgz
  • 解压kafka二进制包
# tar zxvf kafka_2.12-2.6.0.tgz
  • 放到服务安装目录下
# mv kafka_2.12-2.6.0 /opt/app/kafka

2.2 kafka服务配置文件修改

  • kafka 节点1
# vim /opt/app/kafka/config/server-1.properties 

# 每一个broker在集群中的唯一标示,要求是正数。在改变IP地址,不改变broker.id的话不会影响consumers
broker.id=1

# 提供给客户端响应的地址和端口
listeners = PLAINTEXT://10.1.3.85:9091

# 提供给客户端响应的地址和端口(允许外网访问)
advertised.listeners=PLAINTEXT://10.1.3.85:9091

# broker 处理消息的最大线程数
num.network.threads=3

# broker处理磁盘IO的线程数 ,数值应该大于你的硬盘数
num.io.threads=8

# socket的发送缓冲区大小
socket.send.buffer.bytes=102400

# socket的接收缓冲区,socket的调优参数SO_SNDBUFF
socket.receive.buffer.bytes=102400

# socket请求的最大数值,防止serverOOM,message.max.bytes必然要小于socket.request.max.bytes,会被topic创建时的指定参数覆盖
socket.request.max.bytes=104857600

# kafka数据的存放地址,多个地址的话用逗号分割
log.dirs=/opt/data/kafka/kafka-logs-1

# 每个topic的分区个数,若是在topic创建时候没有指定的话会被topic创建时的指定参数覆盖
num.partitions=1

# 我们知道segment文件默认会被保留7天的时间,超时的话就会被清理,那么清理这件事情就需要有一些线程来做。这里就是用来设置恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1

# kafka的内部topic consumer_offsets副本数
offsets.topic.replication.factor=1

# 事务主题的复制因子(设置更高以确保可用性)
transaction.state.log.replication.factor=1

# 覆盖事务主题的min.insync.replicas配置,该参数将默认replicas定义为2
transaction.state.log.min.isr=1

# 控制一条消息数据被保存多长时间,默认是7天
log.retention.hours=168

# 日志文件中每个segment的大小,默认为1G
log.segment.bytes=1073741824

# 上面的参数设置了每一个segment文件的大小是1G,那么就需要有一个东西去定期检查segment文件有没有达到1G,多长时间去检查一次,就需要设置一个周期性检查文件大小的时间(单位是毫秒)。
log.retention.check.interval.ms=300000

# 消费者集群通过连接Zookeeper来找到broker。zookeeper连接服务器地址
zookeeper.connect=10.1.3.85:2181,10.1.3.85:2182,10.1.3.85:2183

# ms连接zookeeper超时时间
zookeeper.connection.timeout.ms=18000

# 空消费组延时rebalance,默认值3秒,0为无限时
group.initial.rebalance.delay.ms=0

# 获取消息后提交偏移量的最大时间,超过设定的时间(默认5分钟),服务端也会认为该消费者失效。
max.poll.interval.ms=3600000

#配置是否开启自动创建topic,如果设置为true, kafka会在以下几种场景自动创建topic:
#当一个producer开始往topic写入消息时。
#当一个consumer开始从topic消费消息时。
#当一个client向topic发送元数据请求时。
auto.create.topics.enable=true

  • kafka 节点2
# vim /opt/app/kafka/config/server-2.properties 

broker.id=2
listeners = PLAINTEXT://10.1.3.85:9092
advertised.listeners=PLAINTEXT://10.1.3.85:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/data/kafka/kafka-logs-2
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=10.1.3.85:2181,10.1.3.85:2182,10.1.3.85:2183
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
max.poll.interval.ms=3600000
auto.create.topics.enable=true

  • kafka 节点3
# vim /opt/app/kafka/config/server-3.properties 

broker.id=3
listeners = PLAINTEXT://10.1.3.85:9093
advertised.listeners=PLAINTEXT://10.1.3.85:9093
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/data/kafka/kafka-logs-3
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=10.1.3.85:2181,10.1.3.85:2182,10.1.3.85:2183
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
max.poll.interval.ms=3600000
auto.create.topics.enable=true

2.3 启动kafka集群

  • 启动kafka集群中的三个节点
# /opt/app/kafka/bin/kafka-server-start.sh -daemon /opt/app/kafka/config/server-1.properties
# /opt/app/kafka/bin/kafka-server-start.sh -daemon /opt/app/kafka/config/server-2.properties
# /opt/app/kafka/bin/kafka-server-start.sh -daemon /opt/app/kafka/config/server-3.properties
  • 查看kafka启动状态
# jps -l|grep kafka
110149 kafka.Kafka
109774 kafka.Kafka
110548 kafka.Kafka

三、测试集群是否可用

  • 查看kafka中topic列表:
# /opt/app/kafka/bin/kafka-topics.sh --list --zookeeper 10.1.3.85:2181,10.1.3.85:2182,10.1.3.85:2183
  • 创建Topic名称
# /opt/app/kafka/bin/kafka-topics.sh --create --zookeeper 10.1.3.85:2181 --replication-factor 1 --partitions 1 --topic test
Created topic test.

选项解释:

--create:创建新的Topic 
--bootstrap-server:指定要哪台Kafka服务器上创建Topic,主机加端口,指定的主机地址一定要和配置文件中的listeners一致
--zookeeper:指定要哪台zookeeper服务器上创建Topic,主机加端口,指定的主机地址一定要和配置文件中的listeners一致
--replication-factor:创建Topic中的每个分区(partition)中的复制因子数量,即为Topic的副本数量,建议和Broker节点数量一致,如果复制因子超出Broker节点将无法创建
--partitions:创建该Topic中的分区(partition)数量
--topic:指定Topic名称
  • 查看已创建的Topic
# /opt/app/kafka/bin/kafka-topics.sh --list --zookeeper 10.1.3.85:2181,10.1.3.85:2182,10.1.3.85:2183
test
  • 生产消息(用一台节点控制台来当 kafka 的生产者)
# /opt/app/kafka/bin/kafka-console-producer.sh --broker-list 10.1.3.85:9092 --topic test
>

参数解释:

--broker-list:指定使用哪台broker来生产消息
--topic:指定要往哪个Topic中生产消息
  • 消费消息

我们在Kafka_node1上的Topic生产消息,在Kafka_node3中消费消息,可以得出,Broker存储过消息后会同步给集群内的其它Broker节点

# /opt/app/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.1.3.85:9091 --topic test --from-beginning
  • 在生产者中写入数据,消费者中显示如图:

生产者中写入数据

# /opt/app/kafka/bin/kafka-console-producer.sh --broker-list 10.1.3.85:9092 --topic test
>this is producer

消费者中显示

# /opt/app/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.1.3.85:9091 --topic test --from-beginning
this is producer
  • 查看Topic详情
# /opt/app/kafka/bin/kafka-topics.sh --describe --bootstrap-server 10.1.3.85:9092 --topic test
Topic: test	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824
	Topic: test	Partition: 0	Leader: 3	Replicas: 3	Isr: 3

参数解释:

Topic: test:topic名称
PartitionCount:3:分片数量
ReplicationFactor:3:Topic副本数量
  • 删除Topic
# /opt/app/kafka/bin/kafka-topics.sh --delete --bootstrap-server 10.1.3.85:9092 --topic test
  • 查看删除信息
# /opt/app/kafka/bin/kafka-topics.sh --list --bootstrap-server 10.1.3.85:9092 
test

我们在node1节点删除了Topic,三台节点会同步更新,所以我们的kafka_data在三台node上全部删除

你可能感兴趣的:(zookeeper,kafka,伪集群,centos7)