文章目录
- 配置并安装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”
替换前
替换后
[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文件夹的路径
修改前
修改后
把下图localhost改为本机IP地址
修改前
修改后
可以把时间改为一个小时
修改前
修改后
Kafka命令都在bin目录下,Kafka常用命令如下:
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证明已经启动
另开一个标签查看
[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
#这个时候消费者就可以从头开始消费