Kafka-不依赖ZooKeeper的kraft

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

图片

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka(本章节)

我们前面演示都是依赖ZooKeeper的版本,本小节我们介绍2个版本不依赖ZooKeeper的版本,第一个版本就是我们前面使用的版本:kafka_2.13-2.8.2,它既支持使用ZooKeeper,也支持使用kraft。

kraft,你可以简单理解就它把存储在ZooKeeper里面的内容存储到Kafka节点里面。

配置文件介绍

[root@localhost config]# ll
total 72
-rw-r--r-- 1 root root  906 Sep  2  2022 connect-console-sink.properties
-rw-r--r-- 1 root root  909 Sep  2  2022 connect-console-source.properties
-rw-r--r-- 1 root root 5321 Sep  2  2022 connect-distributed.properties
-rw-r--r-- 1 root root  883 Sep  2  2022 connect-file-sink.properties
-rw-r--r-- 1 root root  881 Sep  2  2022 connect-file-source.properties
-rw-r--r-- 1 root root 2247 Sep  2  2022 connect-log4j.properties
-rw-r--r-- 1 root root 2540 Sep  2  2022 connect-mirror-maker.properties
-rw-r--r-- 1 root root 2262 Sep  2  2022 connect-standalone.properties
-rw-r--r-- 1 root root 1221 Sep  2  2022 consumer.properties
drwxr-xr-x 2 root root  132 Jun  5 23:56 kraft
-rw-r--r-- 1 root root 4674 Sep  2  2022 log4j.properties
-rw-r--r-- 1 root root 1925 Sep  2  2022 producer.properties
-rw-r--r-- 1 root root 6901 May 21 23:29 server.properties
-rw-r--r-- 1 root root 1032 Sep  2  2022 tools-log4j.properties
-rw-r--r-- 1 root root 1169 Sep  2  2022 trogdor.conf
-rw-r--r-- 1 root root 1205 Sep  2  2022 zookeeper.properties
#前面部分文件就是为了支持ZooKeeper的配置文件

#下面的目录就是不依赖的ZooKeeper的配置文件
[root@localhost config]# ll kraft/
total 40
-rw-r--r-- 1 root root  6058 Sep  2  2022 broker.properties
-rw-r--r-- 1 root root  6004 Sep  2  2022 controller.properties
-rw-r--r-- 1 root root 13232 Sep  2  2022 README.md
-rw-r--r-- 1 root root  6081 Sep  2  2022 server.properties

我们就来先修改配置文件,让它可以使用。

# 1. 生成 22 字符的随机集群 ID
CLUSTER_ID=$(head -c 16 /dev/urandom | base64 | tr '+/' '-_' | cut -c1-22)
# 2. 格式化存储目录
./bin/kafka-storage.sh format -t "${CLUSTER_ID}" -c ./config/kraft/server.properties
# 3. 启动 Kafka,注意配置文件使用,实际就是换了个配置文件
./bin/kafka-server-start.sh ./config/kraft/server.properties

​​​​​​​

启动成功以后,会生成下面的内容。可以你可以把理解存储到ZooKeeper的换成了下面的内容。​​​​​​​
[root@localhost kraft-combined-logs]# ll
total 4
-rw-r--r-- 1 root root   0 Jun  6 00:17 cleaner-offset-checkpoint
-rw-r--r-- 1 root root   0 Jun  6 00:17 log-start-offset-checkpoint
drwxr-xr-x 2 root root 161 Jun  6 00:17 @metadata-0
-rw-r--r-- 1 root root  86 Jun  6 00:16 meta.properties
-rw-r--r-- 1 root root   0 Jun  6 00:17 recovery-point-offset-checkpoint
-rw-r--r-- 1 root root   0 Jun  6 00:17 replication-offset-checkpoint
[root@localhost kraft-combined-logs]# cd \@metadata-0/

#这下面数据和一个标准的Topic基本一样
[root@localhost @metadata-0]# ll
total 12
-rw-r--r-- 1 root root 10485760 Jun  6 00:17 00000000000000000000.index
-rw-r--r-- 1 root root      314 Jun  6 00:17 00000000000000000000.log
-rw-r--r-- 1 root root 10485756 Jun  6 00:17 00000000000000000000.timeindex
-rw-r--r-- 1 root root        8 Jun  6 00:17 leader-epoch-checkpoint
-rw-r--r-- 1 root root      125 Jun  6 00:17 quorum-state
配置文件介绍
1. meta.properties:Kafka Raft 元数据文件,存储集群的核心元数据(如集群 ID、 broker ID、当前任期等)
#Fri Jun 06 00:16:15 CST 2025
cluster.id=xek485Gg7dH3rIpcufOsUQ
version=1
node.id=1
​​​​​​​2.检查点文件(Checkpoint Files)

cleaner-offset-checkpoint:记录日志清理器(Log Cleaner)处理到的偏移量,用于恢复清理进度。

log-start-offset-checkpoint:记录每个分区的起始偏移量,用于快速定位日志文件的起始位置。

recovery-point-offset-checkpoint:记录可恢复的最早偏移量,用于崩溃恢复时确定日志截断点。

replication-offset-checkpoint:记录副本同步的偏移量,用于副本同步状态追踪。

以上均为文本文件,初始为空(0 字节),运行时由 Kafka 自动填充。

3. @metadata-0 目录

作用:存储 Raft 协议的元数据日志(Quorum Log),用于实现 Broker 间的共识(选举、配置变更等)。

说明:名称中的 0 表示这是第一个(默认)分区,Raft 日志以分区形式存储。

    4. @metadata-0 子目录下的文件

    1. 日志分段文件(Log Segments)

    00000000000000000000.inde索引文件,记录日志偏移量到物理位置的映射,用于快速查找日志条目。

    00000000000000000000.log数据文件,存储实际的 Raft 日志条目(如选举请求、配置变更等)。

    00000000000000000000.timeindex时间索引文件,记录时间戳到偏移量的映射,用于按时间查询日志。

      2. 元数据文件

      leader-epoch-checkpoint记录 Leader 纪元(Epoch)信息,用于处理脑裂场景下的旧 Leader 数据。

      quorum-state存储 Raft 协议的当前状态(如节点角色 Leader/Follower、任期 term、已提交的日志索引等)。

        下面是Kafka4.0版本,从目录文件来看,它已经没有单独的kraft目录,因为它已经不支持ZooKeeper,默认的配置都是用于支持Kraft的。

        [root@driver1 kafka_2.13-4.0.0]# ll
        total 68
        drwxr-xr-x 3 root root  4096 Mar 14 16:20 bin
        drwxr-xr-x 2 root root  4096 Mar 14 16:20 config
        drwxr-xr-x 2 root root  8192 Jun  9 00:45 libs
        -rw-r--r-- 1 root root 14699 Mar 14 16:19 LICENSE
        drwxr-xr-x 2 root root  4096 Mar 14 16:20 licenses
        -rw-r--r-- 1 root root 27064 Mar 14 16:19 NOTICE
        drwxr-xr-x 2 root root    44 Mar 14 16:20 site-docs
        [root@driver1 kafka_2.13-4.0.0]# ll ./config/
        total 84
        -rw-r--r-- 1 root root 6120 Mar 14 16:19 broker.properties
        -rw-r--r-- 1 root root  906 Mar 14 16:19 connect-console-sink.properties
        -rw-r--r-- 1 root root  909 Mar 14 16:19 connect-console-source.properties
        -rw-r--r-- 1 root root 5475 Mar 14 16:19 connect-distributed.properties
        -rw-r--r-- 1 root root  883 Mar 14 16:19 connect-file-sink.properties
        -rw-r--r-- 1 root root  881 Mar 14 16:19 connect-file-source.properties
        -rw-r--r-- 1 root root 1486 Mar 14 16:19 connect-log4j2.yaml
        -rw-r--r-- 1 root root 2540 Mar 14 16:19 connect-mirror-maker.properties
        -rw-r--r-- 1 root root 2262 Mar 14 16:19 connect-standalone.properties
        -rw-r--r-- 1 root root 1221 Mar 14 16:19 consumer.properties
        -rw-r--r-- 1 root root 6094 Mar 14 16:19 controller.properties
        -rw-r--r-- 1 root root 5219 Mar 14 16:19 log4j2.yaml
        -rw-r--r-- 1 root root 2065 Mar 14 16:19 producer.properties
        -rw-r--r-- 1 root root 6384 Mar 14 16:19 server.properties
        -rw-r--r-- 1 root root 1091 Mar 14 16:19 tools-log4j2.yaml
        -rw-r--r-- 1 root root 1169 Mar 14 16:19 trogdor.conf

        ​​​​​​​

        运维小路

        一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

        关注微信公众号《运维小路》获取更多内容。

        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值