IP地址 | 主机名 | 需要安装的资源 | 操作系统 |
---|---|---|---|
192.168.184.201 | kafka01 | jdk、Docker、zookeeper、Kafka | centos7.9 |
192.168.184.202 | kafka02 | jdk、Docker、zookeeper、Kafka | centos7.9 |
192.168.184.203 | kafka03 | jdk、Docker、zookeeper、Kafka | centos7.9 |
vi /etc/hosts
在最后面追加内容如下:(这个需要根据你自己服务器的ip来配置)
192.168.184.201 kafka01
192.168.184.202 kafka02
192.168.184.203 kafka03
systemctl stop firewalld
systemctl disable firewalld
2:将下载好的包上传到每个服务器上:
3:查看是否上传成功:
[root@kafka01 ~]# ls
anaconda-ks.cfg jdk-8u333-linux-x64.tar.gz
mkdir -p /usr/java/
tar -zxvf jdk-8u333-linux-x64.tar.gz -C /usr/java/
[root@kafka02 ~]# ls /usr/java/
jdk1.8.0_333
vi /etc/profile
在文件中末尾添加如下配置:(需要更改的是JAVA_HOME,根据自己的java目录名来更改)
JAVA_HOME=/usr/java/jdk1.8.0_333
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
source /etc/profile
[root@kafka01 ~]# java -version
java version "1.8.0_333"
Java(TM) SE Runtime Environment (build 1.8.0_333-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.333-b02, mixed mode)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce-3:20.10.8-3.el7.x86_64 docker-ce-cli-3:20.10.8-3.el7.x86_64 containerd.io
配置镜像加速器方法。
针对Docker客户端版本大于 1.10.0 的用户,可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
cat <<EOF> /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://u01jo9qv.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"live-restore": true,
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"},
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
最后就接入阿里云容器镜像加速器成功啦。
sudo systemctl enable docker
mkdir -p /usr/local/zookeeper
cd /usr/local/zookeeper
zookeeper官网
[root@kafka01 zookeeper]# pwd
/usr/local/zookeeper
[root@kafka01 zookeeper]# ls
apache-zookeeper-3.7.1-bin.tar.gz
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/local/zookeeper
[root@kafka01 zookeeper]# ls
apache-zookeeper-3.7.1-bin apache-zookeeper-3.7.1-bin.tar.gz
vi /etc/profile
在文件中末尾添加如下配置:(ZOOKEEPER_HOME需要根据你自己的zookeeper目录来配置)
export ZOOKEEPER_HOME=/usr/local/zookeeper/apache-zookeeper-3.7.1-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
cd /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/
sudo mkdir data
cd conf
sudo vi zoo.cfg
内容如下:(dataDir修改成自己的目录,kafka01/02/03是我们在hosts配置的主机名映射,相当于ip)
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/data
clientPort=2181
server.1=kafka01:2888:3888
server.2=kafka02:2888:3888
server.3=kafka03:2888:3888
initLimit:ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。
syncLimit:配置follower和leader之间发送消息,请求和应答的最大时间长度。
tickTime:tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。
server.id=host:port1:port2 :其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。
dataDir:其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。
cd /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/data/
echo "1" > myid
echo "2" > myid
echo "3" > myid
cd /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/
[root@kafka01 bin]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@kafka01 bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@kafka02 data]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
[root@kafka03 data]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
Kafka官网
kafka3.2.1快速下载地址
[root@kafka01 ~]# pwd
/root
[root@kafka01 ~]# ls | grep kafka
kafka_2.13-3.2.1.tgz
tar -zxvf kafka_2.13-3.2.1.tgz -C /usr/local/
cd /usr/local/
mv kafka_2.13-3.2.1/ kafka
**8:修改每个服务器的kafka配置文件:(注意:对应的机器要执行对应的命令,不是都在一台服务器执行)**⭐
[root@kafka01 local]# rm -f /usr/local/kafka/config/server.properties
[root@kafka01 local]# vi /usr/local/kafka/config/server.properties
内容如下:
注意下面3个地方:
①每一个kafka的broker.id都不可以一样,并且要为数字(比如0、1、2都是可以的)!
②log.dirs为你当前机器的kafka的日志数据存储目录
③zookeeper.connect:配置连接Zookeeper集群地址,下面的kafka01:2181(kafka01的意思是zk所在的服务器的ip地址,因为我们配置了hosts,所以就直接用主机名更方便;2181就是zk配置文件中的clientPort)
#broker 的全局唯一编号,不能重复,只能是数字。
broker.id=1
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka 运行日志(数据)存放的路径,路径不需要提前创建,kafka 自动帮你创建,可以配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/usr/local/kafka/datas
#topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
# 每个 topic 创建时的副本数,默认时 1 个副本
offsets.topic.replication.factor=1
#segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
#每个 segment 文件的大小,默认最大 1G
log.segment.bytes=1073741824
# 检查过期数据的时间,默认 5 分钟检查一次是否数据过期
log.retention.check.interval.ms=300000
#配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便我们管理)
zookeeper.connect=kafka01:2181,kafka02:2181,kafka03:2181/kafka
[root@kafka02 local]# rm -f /usr/local/kafka/config/server.properties
[root@kafka02 local]# vi /usr/local/kafka/config/server.properties
内容如下:
#broker 的全局唯一编号,不能重复,只能是数字。
broker.id=2
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka 运行日志(数据)存放的路径,路径不需要提前创建,kafka 自动帮你创建,可以配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/usr/local/kafka/datas
#topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
# 每个 topic 创建时的副本数,默认时 1 个副本
offsets.topic.replication.factor=1
#segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
#每个 segment 文件的大小,默认最大 1G
log.segment.bytes=1073741824
# 检查过期数据的时间,默认 5 分钟检查一次是否数据过期
log.retention.check.interval.ms=300000
#配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便我们管理)
zookeeper.connect=kafka01:2181,kafka02:2181,kafka03:2181/kafka
[root@kafka03 local]# rm -f /usr/local/kafka/config/server.properties
[root@kafka03 local]# vi /usr/local/kafka/config/server.properties
内容如下:
#broker 的全局唯一编号,不能重复,只能是数字。
broker.id=3
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka 运行日志(数据)存放的路径,路径不需要提前创建,kafka 自动帮你创建,可以配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/usr/local/kafka/datas
#topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
# 每个 topic 创建时的副本数,默认时 1 个副本
offsets.topic.replication.factor=1
#segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
#每个 segment 文件的大小,默认最大 1G
log.segment.bytes=1073741824
# 检查过期数据的时间,默认 5 分钟检查一次是否数据过期
log.retention.check.interval.ms=300000
#配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便我们管理)
zookeeper.connect=kafka01:2181,kafka02:2181,kafka03:2181/kafka
9:给每个服务器都配置kafka的环境变量:
sudo vim /etc/profile
在最后面追加的内容如下:
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
zkServer.sh start
kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
[root@kafka01 local]# jps
3603 Kafka
3166 QuorumPeerMain
4367 Jps
kafka-server-stop.sh
zkServer.sh stop
zkServer.sh start
kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
kafka-topics.sh
参数 | 描述 |
---|---|
–bootstrap-server |
指定连接的Kafka Broker服务器的主机名称和端口号 |
–topic |
指定操作的topic名称 |
–create | 创建topic |
–delete | 删除topic |
–alter | 修改topic |
–list | 查看所有topic |
–describe | 查看指定topic详细描述 |
–partitions |
设置分区数 |
–replication-factor |
设置分区副本。 |
–config |
更新系统默认的配置 |
kafka-topics.sh --bootstrap-server=kafka01:9092 --list
创建一个名为mytopic01并且partitions(分区数)为2并且replication-factor(副本数之和leader+follower)为2的topic。
kafka-topics.sh --bootstrap-server=kafka01:9092 --partitions=2 --replication-factor=2 --topic=mytopic01 --create
[root@kafka01 ~]# kafka-topics.sh --bootstrap-server=kafka01:9092 --topic=mytopic01 --describe
Topic: mytopic01 TopicId: 0dMc88CfRMyxPYsgaGIgmQ PartitionCount: 2 ReplicationFactor: 2 Configs: segment.bytes=1073741824
Topic: mytopic01 Partition: 0 Leader: 2 Replicas: 2,3 Isr: 2,3
Topic: mytopic01 Partition: 1 Leader: 3 Replicas: 3,1 Isr: 3,1
kafka-topics.sh --bootstrap-server=kafka01:9092 --topic=mytopic01 --partitions=3 --alter
kafka-topics.sh --bootstrap-server=kafka01:9092 --topic=mytopic01 --delete
参数 | 描述 |
---|---|
–bootstrap-server |
指定连接的Kafka Broker服务器的主机名称和端口号 |
–topic |
指定操作的topic名称 |
kafka-console-producer.sh --bootstrap-server=kafka01:9092 --topic=mytopic01
kafka-console-consumer.sh
参数 | 描述 |
---|---|
–bootstrap-server |
指定连接的Kafka Broker服务器的主机名称和端口号 |
–-topic |
指定操作的topic名称 |
–from-beginning | 从头开始消费 |
–group |
指定消费者组ID(可以是中文) |
kafka-console-consumer.sh --bootstrap-server=kafka01:9092 --topic=mytopic01
kafka-console-consumer.sh --bootstrap-server=kafka01:9092 --topic=mytopic01 --from-beginning