Linux C/C++ 学习日记(74):Kafka(二):环境的搭建及常用的指令

注:该文用于个人学习记录和知识交流,如有不足,欢迎指点。

一、安装java环境

Java Downloads | Oracle

安装jdk-8u202-linux-x64.tag.gz版本

1. 打开java archive

2. 找到这个点击

3.下载这个就好了

4. 配置java环境变量

  1. 解压

tar -zxvf jdk-8u202-linux-x64.tar.gz

  1. 创建目录

sudo mkdir /usr/lib/jdk

  1. 将解压的jdk文件移动到新建的/usr/lib/jdk目录下来

sudo mv jdk1.8.0_202 /usr/lib/jdk

  1. 为所有用户配置JDK环境

sudo vim /etc/profile

在末尾添加以下几行文字

bash 复制代码
#set java env 
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_291 
export JRE_HOME=${JAVA_HOME}/jre     
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib     
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version
  1. 执行命令使修改立即生效

source /etc/profile

  1. 测试安装是否成功

java -version

在终端输入,出现版本号说明安装成功。

二、安装部署Kafka

1. 下载kafka

wget https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz

2. 安装kafka

我们下载的kafka是已经编译好的程序,只需要解压即可得到执行程序。

进入kafka目录,以及查看对应的文件和目录

bash 复制代码
$ tar -zxvf kafka_2.11-2.0.0.tgz
$ cd kafka_2.11-2.0.0
$ ls
  • bin:为执行程序目录
  • config:为配置文件目录
  • libs:为库文件目录

3. 配置和启动zookeeper

下载的kafka程序里自带了zookeeper,kafka自带的Zookeeper程序脚本与配置文件名与原生

Zookeeper稍有不同。 kafka自带的Zookeeper程序使用bin/zookeeper-server-start.sh,以及bin/zookeeper-server-stop.sh来启动和停止Zookeeper。

kafka依赖于zookeeper来做master选举一起其他数据的维护。

在config目录下,存在一些配置文件

  • zookeeper.properties
  • server.properties

这里我们直接使用kafka自带的zookeeper。(当然,也可以自己独立搭建zk的集群来实现。)

前台运行:sh zookeeper-server-start.sh ../config/zookeeper.properties

后台运行:sh zookeeper-server-start.sh -daemon ../config/zookeeper.properties

默认端口为:2181,可以通过命令lsof -i:2181 查看zookeeper是否启动成功。

4. 启动和停止kafka

这里只是本地的配置,如果是另一台机器运行zookeeper,要配置对应的ip地址。

zookeeper.connect=localhost:2181

启动kafka

bash 复制代码
sh kafka-server-start.sh -daemon ../config/server.properties

(前台运行:sh kafka-server-start.sh ../config/server.properties )

默认端口为:9092,可以通过命令lsof -i:9092查看kafka是否启动成功。

停止kafka

bash 复制代码
sh kafka-server-stop.sh -daemon ../config/server.properties

三、kafka的基本操作

1. 创建topic

bash 复制代码
sh kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

成功则显示:

bash 复制代码
Created topic "test".

参数说明:

  • --create 是创建主题的的动作指令
  • --zookeeper 指定kafka所连接的zookeeper服务地址
  • --replication-factor 指定了每个分区的副本数量(注意:leader也属于副本范畴)。
    一个broker最多只能存放相同分区的一个副本(也就是说副本数量不能超过broker的数量),设为1表示只有leader,没有follower。条件允许的话,一般设置为3(1个leader + 2个follower)
  • --partitions 指定分区个数
  • --topic 指定所要创建主题的名称,比如test

2. 查看topic

bash 复制代码
sh kafka-topics.sh --list --zookeeper localhost:2181

显示:

bash 复制代码
test

3. 查看topic属性

bash 复制代码
sh kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

显示:

bash 复制代码
Topic:test PartitionCount:1 ReplicationFactor:1 Configs: 
    Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0

3.1 主题全局信息

  • Topic:test:当前查看的主题名称是test
  • PartitionCount:1:该主题只有1 个分区 (对应之前创建时--partitions 1的配置)
  • ReplicationFactor:1:该主题的副本因子是1 (对应之前--replication-factor 1的配置)

3.2 分区(Partition 0)的详细信息

(Kafka 分区从 0 开始编号,这里只有 1 个分区,所以显示Partition: 0

  • Leader: 0:这个分区的主副本(Leader) 部署在Broker 0
  • Replicas: 0:这个分区的副本列表 只有Broker 0(因为副本因子是 1,所以仅在 1 个 Broker 上保存副本)
  • Isr: 0同步副本列表(ISR) 只有Broker 0------ 表示当前只有这个 Broker 上的副本,是与 Leader 保持数据同步的(因只有 1 个副本,它自身就是同步的)

这些信息说明:test主题是单分区、单副本的配置,所有数据仅存于 Broker 0 上(无冗余备份,若 Broker 0 故障,该主题数据会不可用)。

3.3 补充

  • 副本列表(Replicas) :包含该分区的所有副本 (既包括 Leader,也包括所有 Follower)------ 只要是配置的副本(由replication-factor指定数量),都会出现在这个列表里。
  • 同步副本列表(ISR) :是副本列表(Replicas)的子集 ,包含的是与 Leader 保持数据同步的副本------ 这里不仅包含同步的 Follower,也会包含 Leader 本身(因为 Leader 自身的副本一定是最新同步的)。

举个例子:如果一个分区的Replicas[0,1,2](Leader 在 Broker 0,Follower 在 1、2),且 Broker 1、2 都和 Leader 同步,那么Isr就是[0,1,2];若 Broker 2 同步滞后,Isr会变成[0,1](仍包含 Leader)。

4. 消费消息

bash 复制代码
sh kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test
--from-beginning

5. 发送消息

再开启一个终端窗口:

bash 复制代码
sh kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test

四、 kafka-topics.sh的使用方法

围绕创建、修改、删除以及查看等功能。

1. 查看帮助--help

bash 复制代码
sh kafka-topics.sh --help

2. 副本数量不能大于broker的数量

若大于,如:

bash 复制代码
sh kafka-topics.sh --create --zookeeper localhost:2181 -replication-factor 2 -
-partitions 1 --topic test1

则会报错

(注意:副本数量和分区数量的区别。)

3. 创建主题--create

创建主题时候,有3个参数是必填的,分别是 --partitions(分区数量)、 --topic(主题名) 、 --

replication-factor(复制系数), 同时还需使用 --create 参数表明本次操作是想要创建一个主题操作。

bash 复制代码
sh kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1
--partitions 1 --topic test1

返回:

bash 复制代码
Created topic "test1".

说明此时主题 test1 就已经创建了。另外在创建主题的时候,还可以附加以下两个选项:

--if-not-exists:表明仅当该主题不存在时候,创建;

--if-exists:表明当修改或删除这个主题时候,仅在该主题存在的时候去执行操作。

4. 查看broker上所有的主题 --list

bash 复制代码
sh kafka-topics.sh --list --zookeeper localhost:2181

返回:

bash 复制代码
test1

说明test1便为我们创建的主题。

5. 查看指定主题 topic 的详细信息 --describe

该参数会将该主题的所有信息一一列出打印出来,比如分区数量、副本系数、领导者等待。

bash 复制代码
sh kafka-topics.sh --describe --zookeeper localhost:2181 --topic test1

返回:

bash 复制代码
Topic:test1 PartitionCount:1 ReplicationFactor:1 Configs: 
    Topic: test1 Partition: 0 Leader: 0 Replicas: 0 Isr: 0

6. 修改主题信息 --alter(增加主题分区数量)

bash 复制代码
sh kafka-topics.sh --zookeeper localhost:2181 --topic test1 --alter --
partitions 2
bash 复制代码
WARNING: If partitions are increased for a topic that has a key, the partition
logic or ordering of the messages will be affected
Adding partitions succeeded!

可以看到已经成功的将主题的分区数量从1修改为了2。

注意:不要使用 --alter 去尝试减少分区的数量,如果非要减少分区的数量,只能删除整个主题 topic,然后重新创建

7. 删除主题 topic --delete

bash 复制代码
sh kafka-topics.sh --zookeeper localhost:2181 --delete --topic test1

返回:

bash 复制代码
Topic test1 is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

日志信息提示,主题 test1已经被标记删除状态。但是若delete.topic.enable 没有设置为 true , 则将不会有任何作用,即还是可以发送消息和接收消息。

如果要支持能够删除主题的操作,则需要在 /bin 的同级目录 /config目录下的文件server.properties

中,修改配置delete.topic.enable=true(如果置为false,则kafka broker 是不允许删除主题的)。

相关推荐
憧憬成为web高手1 小时前
xss学习记录--xss-lab部署
前端·学习·xss
Accerlator1 小时前
Redis 学习
redis·学习·mybatis
廋到被风吹走1 小时前
持续学习方向:云原生深度(Kubernetes Operator、Service Mesh、Dapr)
java·开发语言·学习
yzp-2 小时前
Kafka 原子更新,精确一次消费 Exactly-Once --------- 学习笔记
分布式·学习·kafka
祁鱼鱼鱼鱼鱼2 小时前
Keepalived高可用学习总结及实验复现
学习
Coovally AI模型快速验证2 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
数码相机·学习·yolo·目标检测·3d·目标跟踪·自动驾驶
观书喜夜长2 小时前
XSS 入门实战:反射型、存储型、DOM 型原理与防御(DVWA 靶场)
学习·web安全
詩不诉卿2 小时前
Zephyr学习之mcuboot的最简单使用记录
学习
MOON404☾2 小时前
R语言EDA学习笔记
笔记·学习·数据分析·r语言·eda