文章目录

  • 配置并安装zookeeper和jdk
  • 安装Kafka
  • Kafka命令都在bin目录下,Kafka常用命令如下:


配置并安装zookeeper和jdk

https://www.oracle.com/java/technologies/downloads/#java8 Java官网
https://www.apache.org/dyn/closer.cgi?path=/kafka Kafka官网
https://www.apache.org/dyn/closer.lua/zookeeper zookeeper官网

scp apache-zookeeper-3.6.1-bin.tar.gz root@192.168.31.3:/root	#上传zookeeper到服务器

[root@localhost ~]# tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz	#解压zookeeper
[root@localhost ~]# cd apache-zookeeper-3.6.1-bin	#进入zookeeper
[root@localhost apache-zookeeper-3.6.1-bin]# cd conf/	#进入配置文件
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg	#拷贝一份名为zoo_sample.cfg的文件

[root@localhost conf]# cd ../	#返回到根目录
[root@localhost apache-zookeeper-3.6.1-bin]# mkdir data	#创建一个要存储数据的文件夹
[root@localhost apache-zookeeper-3.6.1-bin]# cd data/	#进入到文件夹
[root@localhost data]# pwd	#查看当前路径
/root/apache-zookeeper-3.6.1-bin/data

把刚才拷贝的zoo.cfg里面“dataDir=/tmp/zookeeper”替换为刚才创建的文件夹的路径“/root/apache-zookeeper-3.6.1-bin/data”

替换前

Kafka 再次消费数据_zookeeper


替换后

Kafka 再次消费数据_分布式_02

[root@localhost data]# cd ../	#返回根目录
[root@localhost apache-zookeeper-3.6.1-bin]# bin/zkServer.sh start	#启动zookeeper
Error: JAVA_HOME is not set and java could not be found in PATH.	#发现报错,缺少jdk

scp jdk-18_linux-x64_bin.tar.gz root@192.168.31.3:/root/	#官网下载并上传jdk
[root@localhost ~]# mkdir /usr/java	#创建一个新的文件夹
[root@localhost ~]# mv jdk-18_linux-x64_bin.tar.gz /usr/java/	将刚刚上传的jdk移动到新的文件夹下面
[root@localhost ~]# cd /usr/java/	#进入到新的文件夹
[root@localhost java]# tar -zxvf jdk-18_linux-x64_bin.tar.gz	#解压jdk安装包
[root@localhost java]# vim /etc/profile		#打开profile文件;按 i 进入到编辑模式,然后找到 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTRO 这句话,之后另起一行添加一下内容
export JAVA_HOME=/usr/java/jdk-18.0.1.1	#要注意jdk的版本是否正确
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

[root@localhost java]# source /etc/profile	#通过source命令重新读区环境变量
[root@localhost java]# java -version	#确认jdk安装情况
java version "18.0.1.1" 2022-04-22
Java(TM) SE Runtime Environment (build 18.0.1.1+2-6)
Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)

[root@localhost java]# cd /root/apache-zookeeper-3.6.1-bin/		#回到zookeeper目录
[root@localhost apache-zookeeper-3.6.1-bin]# bin/zkServer.sh start	#重新启动zookeeper
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.6.1-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost apache-zookeeper-3.6.1-bin]# jps	#查看进程
27237 QuorumPeerMain	#显示这条就代表zookeeper启动成功
34486 Jps

安装Kafka

cp kafka_2.13-3.2.0.tgz root@192.168.31.3:/root/	#把下载好的Kafka包上传到服务器
[root@localhost apache-zookeeper-3.6.1-bin]# cd		#回到根目录
[root@localhost ~]# ls		#查看是否上传成功
anaconda-ks.cfg             apache-zookeeper-3.6.1-bin.tar.gz
apache-zookeeper-3.6.1-bin  kafka_2.13-3.2.0.tgz
[root@localhost ~]# tar -zxvf kafka_2.13-3.2.0.tgz	#解压安装包
[root@localhost ~]# cd kafka_2.13-3.2.0/	#进入Kafka
[root@localhost kafka_2.13-3.2.0]# mkdir logs	#创建一个专门存放数据的文件夹
[root@localhost kafka_2.13-3.2.0]# vim config/server.properties		#修改名为server.properties的配置文件

把“server.properties”配置文件里名为“log.dirs=/tmp/kafka-logs”的路径修改为刚才创建的logs文件夹的路径

修改前

Kafka 再次消费数据_zookeeper_03


修改后

Kafka 再次消费数据_分布式_04


把下图localhost改为本机IP地址

修改前

Kafka 再次消费数据_Kafka 再次消费数据_05


修改后

Kafka 再次消费数据_Kafka 再次消费数据_06


可以把时间改为一个小时

修改前

Kafka 再次消费数据_java_07


修改后

Kafka 再次消费数据_zookeeper_08

Kafka命令都在bin目录下,Kafka常用命令如下:

Kafka 再次消费数据_zookeeper_09

bin/kafka-server-start.sh config/server.properties	#启动Kafka命令

bin/kafka-topics.sh --create --zookeeper 192.168.31.3:2181 --partitions 1 --replication-factor 1 --topic first	#老版Kafka创建topic命令
kafka-topics.sh	#创建主题要用到的命令
--create	#创建
--zookeeper	#依赖zookeeper
192.168.31.3:2181	#本机的IP,端口是固定的
--partitions	#分区
--replication-factor	#副本数量
--topic	#因为要创建主题所以用topic
first	#要创建的主题名称,可以随意命名
bin/kafka-topics.sh --create --bootstrap-server 192.168.31.3:9092 --partitions 1 --replication-factor 1 --topic first	#新版Kafka创建topic命令
#Kafka 不再需要 ZooKeeper 连接字符串,即--zookeeper localhost:2181;使用 Kafka Broker的 --bootstrap-server localhost:9092来替代--zookeeper localhost:2181

bin/kafka-topics.sh --list --zookeeper 192.168.31.3:2181	#老版Kafka查看全部主题命令
bin/kafka-topics.sh --bootstrap-server 192.168.31.3:9092 --list	#新版Kafka查看全部主题命令

bin/kafka-topics.sh --describe --bootstrap-server 192.168.31.3:9092 --topic first	#查看某一个主题描述

bin/kafka-topics.sh --zookeeper 192.168.31.3:2181 --delete --topic first	#老版Kafka删除主题命令
bin/kafka-topics.sh --bootstrap-server 192.168.31.3:9092 --delete --topic first	#新版Kafka删除主题命令

bin/kafka-topics.sh --bootstrap-server 192.168.31.3:9092 --alter --topic first --partitions 3	#修改主题

bin/kafka-console-producer.sh --broker-list 192.168.31.3:9092 --topic first	#发送消息
kafka-console-producer.sh	#发送消息要用到的命令
--broker-list 192.168.31.3:9092	#要发送消息主机的IP:端口号
--topic first	#发送到名为first的主题里面

bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.3:9092 --topic first	#创建消费者从当前位置消费
bin/kafka-console-consumer.sh	#创建消费者要用到的命令
--bootstrap-server 192.168.31.3:9092	#连接Kafka broker的主机名称和端口号
--topic first	#指定要消费的主题
bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.3:9092 --topic first --from-beginning		#创建消费者从当前位置消费
--from-beginning	#从头开始

启动Kafka

[root@localhost kafka_2.13-3.2.0]# bin/kafka-server-start.sh config/server.properties	#启动kafka,在启动的时候必须指定一个配置文件,上面已经把config下名为server.properties的配置文件修改过了

看到started证明已经启动

Kafka 再次消费数据_kafka_10


另开一个标签查看

[root@localhost ~]# jps	#查看进程 发现zookeeper和Kafka都已经启动
27237 QuorumPeerMain
34678 Kafka
35130 Jps

因为所有生产者生产完数据都要发送到topic里,所以我们接下来要创建主题
[root@localhost ~]# cd kafka_2.13-3.2.0/	#进入到Kafka文件夹
[root@localhost kafka_2.13-3.2.0]# bin/kafka-topics.sh --create --zookeeper 192.168.31.3:2181 --partitions 1 --replication-factor 1 --topic first	创建topic,发现有报错,因为Kafka最新版本创建topic方式已经改变
Exception in thread "main" joptsimple.UnrecognizedOptionException: zookeeper is not a recognized option
	at joptsimple.OptionException.unrecognizedOption(OptionException.java:108)
	at joptsimple.OptionParser.handleLongOptionToken(OptionParser.java:510)
	at joptsimple.OptionParserState$2.handleArgument(OptionParserState.java:56)
	at joptsimple.OptionParser.parse(OptionParser.java:396)
	at kafka.admin.TopicCommand$TopicCommandOptions.<init>(TopicCommand.scala:567)
	at kafka.admin.TopicCommand$.main(TopicCommand.scala:47)
	at kafka.admin.TopicCommand.main(TopicCommand.scala)
	
解决方案,按照最新的kafka创建主题topic方式创建:
[root@localhost kafka_2.13-3.2.0]# bin/kafka-topics.sh --create --bootstrap-server 192.168.31.3:9092 --partitions 1 --replication-factor 1 --topic first	#创建名为first的主题
Created topic first.	#创建成功

[root@localhost kafka_2.13-3.2.0]# bin/kafka-topics.sh --bootstrap-server 192.168.31.3:9092 --list	#	查看主题
first

[root@localhost kafka_2.13-3.2.0]# bin/kafka-topics.sh --describe --bootstrap-server 192.168.31.3:9092 --topic first	#查看主题描述
Topic: first	TopicId: Zh7fVQlKSSWoYChQT9VR8w	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824
	Topic: first	Partition: 0	Leader: 0	Replicas: 0	Isr: 0
#第⼀⾏给出了所有分区的摘要。后⾯以下每⼀⾏给出⼀个partition中的信息,如果我们只有⼀个partition,则只显⽰⼀⾏
#leader 是在给出的所有partitons中负责读写的节点(borker的id),每个节点都有可能成为leader
#replicas 显⽰给定partiton所有副本所存储节点的节点列表(broker的id列表),不管该节点是否是leader或者是否存活。
#isr 副本都已同步的的节点集合,这个集合中的所有节点都是存活状态,并且跟leader同步。

[root@localhost kafka_2.13-3.2.0]# bin/kafka-topics.sh --bootstrap-server 192.168.31.3:9092 --alter --topic first --partitions 3	#修改主题,注意分区数量只能增加不能减少
[root@localhost kafka_2.13-3.2.0]# bin/kafka-topics.sh --bootstrap-server 192.168.31.3:9092 --topic first --describe	#再次查看主题,发现分区数量改为三个了
Topic: first	TopicId: Zh7fVQlKSSWoYChQT9VR8w	PartitionCount: 3	ReplicationFactor: 1	Configs: segment.bytes=1073741824
	Topic: first	Partition: 0	Leader: 0	Replicas: 0	Isr: 0
	Topic: first	Partition: 1	Leader: 0	Replicas: 0	Isr: 0
	Topic: first	Partition: 2	Leader: 0	Replicas: 0	Isr: 0
[root@localhost kafka_2.13-3.2.0]# bin/kafka-topics.sh --bootstrap-server 192.168.31.3:9092 --delete --topic first	#删除主题
[root@localhost kafka_2.13-3.2.0]# bin/kafka-topics.sh --bootstrap-server 192.168.31.3:9092 --list	#这时候已经查看不到了

[root@localhost kafka_2.13-3.2.0]# bin/kafka-console-producer.sh --broker-list 192.168.31.3:9092 --topic first		#发送消息
>a
>a
>a
>

>a	#生产者发送的消息
>asd
>阿斯顿
>	

#因为是一台主机,所以要另开一个标签去操作
[root@localhost kafka_2.13-3.2.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.3:9092 --topic first	#创建消费者,从当前位置消费
a
asd
阿斯顿
#消费者只能从当前位置开始消费

[root@localhost kafka_2.13-3.2.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.3:9092 --topic first --from-beginning	#创建消费者,从头开始消费
a
a
a
asd
阿斯顿
a	
#这个时候消费者就可以从头开始消费