文章目录

  • 1:环境准备
  • 1:jdk1.8安装
  • 2:配置主机名和IP映射
  • 3:关闭防火墙&防火墙开机自启动
  • 4:安装&启动Zookeeper
  • 2:kafka单机安装
  • 1:下载地址
  • 2:解压
  • 3:修改配置
  • 1:修改核心配置文件 /opt/kafka/config/server.properties
  • 2:注:server.properties文件的配置的全部含义
  • 4:启动kafka
  • 3:单机使用
  • 1:主题(topic)命令行操作
  • 1:主题命令行参数
  • 2:创建主题
  • 3:查看分区
  • 4:查看分区详情
  • 2:消费者命令
  • 1:命令参数
  • 2:消费者订阅topic01
  • 3:生产者命令
  • 1:生产者命令行参数
  • 2:生产者生产消息
  • 3:消费者立即得到消息
  • 4:集群安装
  • 1:jdk安装,这个是一样的
  • 2:配置主机名和映射
  • 3:关闭防火墙
  • 4:同步时钟
  • 5:配置zookeeper集群
  • 6:配置kafka集群
  • 1:下载地址
  • 2:解压
  • 3:修改配置(跟单机区别在这里)
  • 4:分别启动kafka
  • 7:集群创建topic
  • 1:创建:topic01,3个分区,2个副本因子
  • 2:查看三台服务器存储情况
  • 3:通过命令查看topic分区情况
  • 8:集群下命令实例


1:环境准备

1:jdk1.8安装

1:检查系统中是否已经安装过openjdk,如果有将其删除

rpm -qa | grep java
yum remove -y java-*

2:将jdk上传到主机,并解压缩到指定目录 /usr/local

tar zxvf jdk-11.0.12_linux-x64_bin.tar.gz -C /usr/local/

3:配置环境变量并刷新

#编辑配置文件
vi /etc/profile
#写入如下内容
export JAVA_HOME=/usr/local/jdk-11.0.12
export CLASS_PATH=.
export PATH=$JAVA_HOME/bin:$PATH
#加载配置文件
source /etc/profile.d/

4:检查安装

kafka docker kraft 单节点 kafka单机集群搭建_zookeeper

2:配置主机名和IP映射

配置主机名和ip的映射,后边要用

kafka docker kraft 单节点 kafka单机集群搭建_hadoop_02

kafka docker kraft 单节点 kafka单机集群搭建_centos_03


kafka docker kraft 单节点 kafka单机集群搭建_bootstrap_04

3:关闭防火墙&防火墙开机自启动

注;不同的系统防火墙命令不同,以centos7为例

启动: systemctl start firewalld

关闭: systemctl stop firewalld

查看状态: systemctl status firewalld

开机禁用 : systemctl disable firewalld

开机启用 : systemctl enable firewalld

4:安装&启动Zookeeper

安装zk的文档我专门写了另一个博客:zookeeper安装和使用

2:kafka单机安装

1:下载地址

https://kafka.apache.org/downloads

2:解压

tar -zxvf kafka_2.12-3.0.0.tgz

3:修改配置

1:修改核心配置文件 /opt/kafka/config/server.properties

#broker.id属性在kafka集群中必须要是唯一
broker.id=0
#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://centos:9092   
#kafka的消息存储文件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址
zookeeper.connect=centos:2181

2:注:server.properties文件的配置的全部含义

#broker 的全局唯一编号,不能重复,只能是数字。
broker.id=0
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的线程数量
.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600

#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://centos:9092   
#代理将向生产者和消费者通告的主机名和端口,配上这个就可以直接通过ip来进行连接
advertised.listeners=PLAINTEXT://192.168.138.128:9092

#kafka 运行日志(数据)存放的路径,路径不需要提前创建,kafka 自动帮你创建,可以
配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/opt/module/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 分钟检查一次是否数据过期
=300000
#配置连接 Zookeeper 集群地址(在 zk 根目录下创建/kafka,方便管理)
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/ka
fka

4:启动kafka

在kafka根目录下:./bin/ -daemon config/server.properties

kafka docker kraft 单节点 kafka单机集群搭建_kafka_05

3:单机使用

1:主题(topic)命令行操作

1:主题命令行参数

./bin/kafka-topics.sh

参数 描述
--bootstrap-server <String: server toconnect to> 连接的 Kafka Broker 主机名称和端口号。
--topic <String: topic> 操作的 topic 名称。
--create 创建主题。
--delete 删除主题。
--alter 修改主题。
--list 查看所有主题。
--describe 查看主题详细描述。
--partitions <Integer: # of partitions> 设置分区数。
--replication-factor<Integer: replication factor> 设置分区副本。
--config <String: name=value> 更新系统默认的配置。

2:创建主题

现在我们来创建一个名字为“topic01”的Topic,这个topic只有一个partition,并且备份因子也设置为1:

…/bin/kafka-topics.sh --bootstrap-server centos:9092 --create --partitions 1 --replication-factor 1 --topic topic01

kafka docker kraft 单节点 kafka单机集群搭建_centos_06

3:查看分区

./bin/kafka-topics.sh --bootstrap-server centos:9092 --list

kafka docker kraft 单节点 kafka单机集群搭建_centos_07

4:查看分区详情

./bin/kafka-topics.sh --bootstrap-server centos:9092 --describe --topic topic01

kafka docker kraft 单节点 kafka单机集群搭建_bootstrap_08

2:消费者命令

1:命令参数

./bin/kafka-console-consumer.sh

--bootstrap-server <String: server toconnect to> 连接的 Kafka Broker 主机名称和端口号。
--topic <String: topic> 操作的 topic 名称。
--from-beginning 从头开始消费。
--group <String: consumer group id> 指定消费者组名称。

2:消费者订阅topic01

./bin/kafka-console-consumer.sh --bootstrap-server centos:9092 --topic topic01

kafka docker kraft 单节点 kafka单机集群搭建_hadoop_09

3:生产者命令

1:生产者命令行参数

./bin/

--broker-list:必传参数,用来指定Kafka的代理地址列表,多个地址间使用逗号隔开
--topic <String: topic> 操作的 topic 名称。

2:生产者生产消息

./bin/ --broker-list centos:9092 --topic topic01

kafka docker kraft 单节点 kafka单机集群搭建_centos_10

3:消费者立即得到消息

kafka docker kraft 单节点 kafka单机集群搭建_kafka_11

4:集群安装

集群安装和单机安装基本一样

1:jdk安装,这个是一样的

2:配置主机名和映射

kafka docker kraft 单节点 kafka单机集群搭建_zookeeper_12

3:关闭防火墙

这个三台分别关闭即可

4:同步时钟

因为三台机器需要同步时间,否则容易造成数据不一致

kafka docker kraft 单节点 kafka单机集群搭建_centos_13


同步时钟 ntpdate cn.pool.ntp.org 或者 ntpdate ntp[1-7].aliyun.com

然后clock - w

kafka docker kraft 单节点 kafka单机集群搭建_zookeeper_14

5:配置zookeeper集群

安装zk的文档我专门写了另一个博客:zookeeper安装和使用

6:配置kafka集群

1:下载地址

https://kafka.apache.org/downloads

2:解压

tar -zxvf kafka_2.12-3.0.0.tgz

3:修改配置(跟单机区别在这里)

修改核心配置文件 /opt/kafka/config/server.properties

#broker.id属性在kafka集群中必须要是唯一
broker.id=0     
#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://centos:9092   
#kafka的消息存储文件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址
zookeeper.connect=centos:2181

注:集群时修改地方:

1:broker.id----比如centosA为0,centosB为1,centosC为2

2:listeners=PLAINTEXT://centos:9092 ,分别改为监控自己节点的主机和端口号

3:zookeeper集群地址用逗号分割

kafka docker kraft 单节点 kafka单机集群搭建_kafka_15

注:server.properties文件的配置的全部含义

#broker 的全局唯一编号,不能重复,只能是数字。
broker.id=0
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的线程数量
.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka 运行日志(数据)存放的路径,路径不需要提前创建,kafka 自动帮你创建,可以
配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/opt/module/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 分钟检查一次是否数据过期
=300000
#配置连接 Zookeeper 集群地址(在 zk 根目录下创建/kafka,方便管理)
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/ka
fka

4:分别启动kafka

在kafka根目录下:./bin/ -daemon config/server.properties

kafka docker kraft 单节点 kafka单机集群搭建_kafka_05

7:集群创建topic

1:创建:topic01,3个分区,2个副本因子

kafka docker kraft 单节点 kafka单机集群搭建_zookeeper_17

2:查看三台服务器存储情况

在centosA即borker0节点上:

kafka docker kraft 单节点 kafka单机集群搭建_bootstrap_18


在centosB即borker1节点上:

kafka docker kraft 单节点 kafka单机集群搭建_zookeeper_19

在centosC即borker2节点上:

kafka docker kraft 单节点 kafka单机集群搭建_kafka_20

3:通过命令查看topic分区情况

./bin/kafka-topics.sh 
                    --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
                    --describe 
                    --topic topic01

kafka docker kraft 单节点 kafka单机集群搭建_hadoop_21


如果三个节点,创建两个分区,3个副本因子,可以看到,虽然有3台broker,但是只有两台担任此topic的leader,但是三台机器上都有副本;

kafka docker kraft 单节点 kafka单机集群搭建_bootstrap_22

8:集群下命令实例

1:创建topic

[root@CentOSA kafka_2.11-2.2.0]# ./bin/kafka-topics.sh 
                    --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
                    --create 
                    --topic topic02 
                    --partitions 3 
                    --replication-factor 3

2:查看topic列表

[root@CentOSA kafka_2.11-2.2.0]# ./bin/kafka-topics.sh 				
                                                --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
			       --list

3:查看topic详情

[root@CentOSA kafka_2.11-2.2.0]# ./bin/kafka-topics.sh 
                    --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
                    --describe 
                    --topic topic01
Topic:topic01	PartitionCount:3	ReplicationFactor:3	Configs:segment.bytes=1073741824
	Topic: topic01	Partition: 0	Leader: 0	Replicas: 0,2,3	Isr: 0,2,3
	Topic: topic01	Partition: 1	Leader: 2	Replicas: 2,3,0	Isr: 2,3,0
	Topic: topic01	Partition: 2	Leader: 0	Replicas: 3,0,2	Isr: 0,2,3

4:修改topic—只能增加分区和副本,不能减少

[root@CentOSA kafka_2.11-2.2.0]# ./bin/kafka-topics.sh 
                    --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
                    --alter 
                    --topic topic03 
                    --partitions 2

5:删除topic

[root@CentOSA kafka_2.11-2.2.0]# ./bin/kafka-topics.sh 
                    --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
                    --delete 
                    --topic topic03

6:订阅topic

[root@CentOSA kafka_2.11-2.2.0]# ./bin/kafka-console-consumer.sh 
                  --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
                  --topic topic01 
                  --group g1 
                  --property print.key=true      //是否打印key
                  --property print.value=true   //是否打印value
                  --property key.separator=,    //key和value之间的分割

7:生产消息

[root@CentOSA kafka_2.11-2.2.0]# ./bin/ 
                  --broker-list CentOSA:9092,CentOSB:9092,CentOSC:9092 
                  --topic topic01

8:消费组查看详情

[root@CentOSA kafka_2.11-2.2.0]# ./bin/kafka-consumer-groups.sh 
                  --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
                  --list
                  g1

[root@CentOSA kafka_2.11-2.2.0]# ./bin/kafka-consumer-groups.sh 
                  --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 
                  --describe 
                  --group g1

TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID    HOST            CLIENT-ID
topic01 1                      0                    0                           0     consumer-1-**    /192.168.52.130 consumer-1
topic01 0                      0                    0                          0      consumer-1-**   /192.168.52.130 consumer-1
topic01 2                      1                     1                          0      consumer-1-**   /192.168.52.130 consumer-1