Kafka-kraft模式部署与使用

学习Kafka-Kraft部署使用背景和意义

目前磐基平台已经提供kafka3.5.1版本能力,新版本对kakfa元数据管理、注册协调架构已经发生了很大的变化。据了解目前已有租户在使用。对于kafka新版本新特性来讲,广大磐基运维不十分了解和熟练,特别是在维护和处理问题时显得力不从心,因此需要推出一篇kafka-kraft模式的部署和使用技术文档,kraft模式是Kafka 2.8版本的新特性和功能,在kafka3.x版本中已经成熟,是kafka组件未来发展的趋势,磐基一线二线运维了解和学习新的技术可以提升运维效率和运维技术能力。因此,学习和掌握Kafka-kraft的架构原理和维护是一个必须的技能。

Kafka-Kraft架构

Karft是一个Apache基金会项目,具有Apache v2许可证。未来Kraft将作为Apache Kafka的内置共识机制将取代Zookeeper。该模式在Kafka 2.8版本发布了体验版本,Kafka 3.X系列中Kraft是一个稳定版本。Kraft运行模式的Kafka集群,不会将元数据存在zk中,部署Kakfa集群时无需再部署zk集群,Kafka将元数据存储在Controller节点的Kraft Quorum中。Kraft模式提供很多优势,如可支持更多分区,更快速切换Controller,另外还避免Controller缓存的元数据和zk存储的数据不一致带来的一系列问题。

Kafka在2.8版本之前,Kafka强依赖zookeeper来来负责集群元数据的管理,这也导致当Zookeeper集群性能发生抖动时,Kafka的性能也会收到很大的影响。2.8版本之后,kafka3.x开始提供KRaft(Kafka Raft,依赖Java 8+ )模式,开始去除对zookeeper的依赖。最新的3.5等版本中,Kafka依然兼容zookeeper Controller,但Kafka Raft元数据模式,将依赖于ZooKeeper的控制器改造成了基于Kafka Raft的Quorm控制器,因此可以在不使用ZooKeeper的情况下实现集群。

Kafka KRaft模式是Kafka的一个新特性,它用于取代传统的Kafka集群的ZooKeeper协调器。在KRaft模式下,不再需要ZooKeeper。因为 Kafka 将元数据存储在 controller 节点的 KRaft Quorum中。KRaft 可以带来很多好处,比如可以支持更多的分区,更快速的切换 controller ,也可以避免 controller 缓存的元数据和Zookeeper存储的数据不一致带来的一系列问题。Kafka控制器在KRaft模式下由Kafka集群自己选举,这提供了更高的可用性和可靠性。

Zookeeper是一个重量级的协调系统,非常笨重,zk还要求奇数个节点的集群配置,扩容和收缩都非常不方便,另外zk的配置方式也和Kafka完全不一样。当zk和Kafka放在一个存储系统里,当topic和partition的数量上了规模,数据同步问题就会非常显著。Zookeeper是强一致性的组件(符合CP理论),如果集群中数据发生变化,那么必须要等到其它节点都同步,至少超过一半同步完成,这样节点数多性能差。

kafka的角色:
controller节点 相当于主机(主机类似 zk 功能)
broker 节点相当于从机
混合节点:上述二者兼有

角色作用:
Broker节点:即代理节点,是Kafka中的工作节点,充当消息队列的角色,负责储存和处理消息,每个Broker都是一个独立的Kafka服务器,可以在不同的机器上运行,除此之外Broker还负责分区(partition)的管理,将主题(topic)划分为多个分区,并分布在集群的不同Broker上

Controller节点:即控制器节点,是集群中的特殊节点,负责储存和管理整个集群元数据和状态,它能够监控整个集群中的Broker,在需要时还能够进行平衡操作
混合节点:即同时担任Broker和Controller节点角色的节点

zookeeper+kafka与Kafka-Kraft模式对比

zookeeper+Kafka 现有架构机制:
元数据在 zookeeper 中,运行时动态选举 controller,由controller 进行 Kafka 集群管理。在当前架构中,Kafka集群包含多个broker节点和一个ZooKeeper 集群。我们在这张图中描绘了一个典型的集群结构:4个broker节点和3个ZooKeeper节点。Kafka 集群的controller (橙色)在被选中后,会从 ZooKeeper 中加载它的状态。controller 指向其他 broker节点的箭头表示 controller 在通知其他 broker 发生了变更。

运维部署:3 个 ZK 节点;2…N 个 Broker 节点,其中一个 Broker 承担 Controller 的角色。除了拉起一套最小生产的 Kafka 集群需要至少 3 + N 的资源外,Kafka 的运维人员要同时掌握 ZK 和 Kafka Broker 两套完全不同的系统的运维方式。

通信协调:ZK 节点之间通过 ZAB 协议进行一致性协调;Broker 会通过 ZK 来选出一个 Controller 负责全局的协调,同时也会直接修改 ZK 里的数据;Controller 也会监听和修改 ZK 里的数据,并调用 Broker 来完成集群的协调。虽然 ZK 之间的一致性由 ZAB 来保障了,但是 ZK 与 Controller 之间和 Controller 与 Broker 之间的一致性是相对比较脆弱的。

kafka+kraft 模式架构机制:
不再依赖 zookeeper 集群,而是用三台 controller 节点代替 zookeeper,元数据保存在 controller 中,由 controller 直接进行 Kafka 集群管理。 controller相关的元数据信息以kafka日志的形式存在(即:以消息队列消息的形式存在)。使用Kraft协议代替zookeeper进行集群的Controller选举。

在新的架构中,三个 controller 节点替代三个ZooKeeper节点。控制器节点和 broker 节点运行在不同的进程中。controller 节点中会选择一个成为Leader(橙色)。新的架构中,控制器不会向 broker 推送更新,而是 broker 从这个 controller Leader 拉取元数据的更新信息。

运维部署:3 个 Controller 节点;0…N 个 Broker 节点。Kafka 节点可以同时承担 Controller 和 Broker 两个角色,因此一套最小生产集群只需要 3 个节点。在测试环境更可以只以 1 节点模式就可以轻量地拉起一个 Kafka 集群。

通信协调:Controller 节点底层通过 Raft 协议达成一致,Controller 的内存状态通过 #replay Raft Log 来构建,因此 Controller 之间的内存状态都是一致的;Broker 订阅 KRaft Log 维护和 Controller 一致的内存状态,并且通过事件驱动的方式执行 Partition Reassignment 之类的操作来实现集群最终一致性协调。整个集群的状态维护和一致性协调都是基于 KRaft 中的事件。

Kraft 模式优势:

  • (1)Kafka不再依赖外部框架,而是能够独立运行。这样减少Zookeeper性能抖动对Kafka集群性能的影响,同时Kafka产品的版本迭代也更自由;

  • (2)controller 管理集群时,不再需要从 zookeeper 中先读取数据,集群性能上升;

  • (3)由于不依赖 zookeeper,集群扩展时不再受到 zookeeper 读写能力限制;

  • (4)controller 不再由zookeeper动态选举,而是由配置文件固定产生。这样可以有针对性的加强controller节点的配置,而不是像以前一样对随机 controller 节点的高负载束手无策。

  • (5)Zookeeper的产品特性决定了他不适合存储大量的数据,这对Kafka的集群规模(确切的说应该是Partition规模)是极大的限制。摆脱Zookeeper后,集群扩展时元数据的读写能力得到增强。

    因此,对于kaka组件而言,kafka-kraft模式是未来发展的趋势,KRaft模式通过提供去中心化的元数据管理和高可用性,减少了对于外部ZooKeeper的依赖,这对于提高系统的可靠性和稳定性具有重要意义。
    四、部署kafka-kraft集群演示:

环境:三controller节点,三broker节点分离部署方案:
每个服务器节点分别启动两个kafka进程,分别为controller、broker。9093是controller端口,9092是broker端口。

192.168.40.11 id=1 角色controller id=2 角色broker
192.168.40.14 id=3 角色controller id=4 角色broker
192.168.40.18 id=5 角色controller id=6 角色broker

创建kafka数据目录:

mkdir  /kafkacontroller    //每个kafka创建controller数据目录
mkdir  /kafkabroker       //每个创建broker数据目录

每个节点复制两个程序:

tar fx kafka_2.13-3.5.0.tgz -C /usr/local/
mv kafka_2.13-3.5.0  kafka3.5-kraft-controller    //复制controller程序
mv kafka_2.13-3.5.0  kafka3.5-kraft            //复制broker程序

配置文件配置

[root@localhost local]# cd kafka_2.13-3.5.0/
[root@localhost kafka_2.13-3.5.0]# ll
total 64
drwxr-xr-x 3 root root  4096 Jun  5  2023 bin
drwxr-xr-x 3 root root  4096 Jun  5  2023 config
drwxr-xr-x 2 root root  8192 Aug 13 05:08 libs
-rw-r--r-- 1 root root 14770 Jun  5  2023 LICENSE
drwxr-xr-x 2 root root   284 Jun  5  2023 licenses
-rw-r--r-- 1 root root 28184 Jun  5  2023 NOTICE
drwxr-xr-x 2 root root    44 Jun  5  2023 site-docs
[root@localhost kafka_2.13-3.5.0]# cd config/
[root@localhost config]# ll
total 72
-rw-r--r-- 1 root root  906 Jun  5  2023 connect-console-sink.properties
-rw-r--r-- 1 root root  909 Jun  5  2023 connect-console-source.properties
-rw-r--r-- 1 root root 5475 Jun  5  2023 connect-distributed.properties
-rw-r--r-- 1 root root  883 Jun  5  2023 connect-file-sink.properties
-rw-r--r-- 1 root root  881 Jun  5  2023 connect-file-source.properties
-rw-r--r-- 1 root root 2063 Jun  5  2023 connect-log4j.properties
-rw-r--r-- 1 root root 2540 Jun  5  2023 connect-mirror-maker.properties
-rw-r--r-- 1 root root 2262 Jun  5  2023 connect-standalone.properties
-rw-r--r-- 1 root root 1221 Jun  5  2023 consumer.properties
drwxr-xr-x 2 root root   85 Jun  5  2023 kraft     
-rw-r--r-- 1 root root 4917 Jun  5  2023 log4j.properties
-rw-r--r-- 1 root root 2065 Jun  5  2023 producer.properties
-rw-r--r-- 1 root root 6896 Jun  5  2023 server.properties
-rw-r--r-- 1 root root 1032 Jun  5  2023 tools-log4j.properties
-rw-r--r-- 1 root root 1169 Jun  5  2023 trogdor.conf
-rw-r--r-- 1 root root 1205 Jun  5  2023 zookeeper.properties
[root@localhost config]# cd kraft/
[root@localhost kraft]# ll
total 24
-rw-r--r-- 1 root root 6136 Jun  5  2023 broker.properties
-rw-r--r-- 1 root root 5765 Jun  5  2023 controller.properties
-rw-r--r-- 1 root root 6340 Jun  5  2023 server.properties

配置文件配置

192.168.40.11

controller角色:

process.roles=controller   //controller角色
node.id=1
controller.quorum.voters=1@192.168.40.11:9093,3@192.168.40.14:9093,5@192.168.40.18:9093
listeners=CONTROLLER://192.168.40.11:9093
log.dirs=/kafkacontroller
controller.listener.names=CONTROLLER

Broker角色:

process.roles=broker    //broker角色
node.id=2
controller.quorum.voters=1@192.168.40.11:9093,3@192.168.40.14:9093,5@192.168.40.18:9093
listeners=PLAINTEXT://192.168.40.11:9092
log.dirs=/kafkabroker
controller.listener.names=CONTROLLER

192.168.40.14

controller角色:

process.roles=controller   //controller角色
node.id=3
controller.quorum.voters=1@192.168.40.11:9093,3@192.168.40.14:9093,5@192.168.40.18:9093
listeners=CONTROLLER://192.168.40.14:9093
log.dirs=/kafkacontroller
controller.listener.names=CONTROLLER

Broker角色:

process.roles=broker     //broker角色
node.id=4
controller.quorum.voters=1@192.168.40.11:9093,3@192.168.40.14:9093,5@192.168.40.18:9093
listeners=PLAINTEXT://192.168.40.14:9092
log.dirs=/kafkabroker
controller.listener.names=CONTROLLER

192.168.40.18

controller角色:

process.roles=controller   //controller角色
node.id=5
controller.quorum.voters=1@192.168.40.11:9093,3@192.168.40.14:9093,5@192.168.40.18:9093
listeners=CONTROLLER://192.168.40.18:9093
log.dirs=/kafkacontroller
controller.listener.names=CONTROLLER

Broker角色:

process.roles=broker     //broker角色
node.id=6
controller.quorum.voters=1@192.168.40.11:9093,3@192.168.40.14:9093,5@192.168.40.18:9093
listeners=PLAINTEXT://192.168.40.18:9092
log.dirs=/kafkabroker
controller.listener.names=CONTROLLER

Kraft基本配置参数说明:

process.roles=broker, controller    //kafka 的角色(controller 相当于主机、broker 节点相当于从机,主机类似 zk 功能,负责kaka集群管理。在 KRaft 模式中,每个 Kafka 服务器都可以使用 process.roles 属性配置为 controller、broker 或这两个。设置为 broker,则服务器将充当 Broker。设置为 controller,则服务器将充当 Controller。设置为 broker,controller,则服务器同时充当 Broker 和 Controller。如果process.roles 没有设置。那么集群就假定是运行在ZooKeeper模式下。
同时充当 Broker 和 Controller 的 Kafka 服务器被称为“组合”服务器。对于像开发环境这样的小用例,组合服务器更易于操作。关键的缺点是控制器与系统的其余部分的隔离度较低。例如,在组合模式下,不可能将 Controller 与 Broker 程序分开滚动或缩放。不建议在关键部署环境中使用组合模式。node.id=2      //broker节点 ID,任何角色的每个节点id必须不同。
controller.listener.names=CONTROLLER     //controller 服务协议别名。每个角色每个kafka节点必须设置,且参数值一样 。控制器使用的侦听器名称的逗号分隔列表。如果`listener.security.protocol.map`中未设置显式映射,则默认使用PLAINTEXT协议 。如果在KRaft模式下运行,这是必需的。controller.quorum.voters=2@hadoop102:9093,3@hadoop103:9093,4@hadoop104:9093   // Controller节点列表,投票者列表。Kafka任何角色节点必须设置,且参数值相同。前面的数字如1是这个controller控制节点ip的node. id。注意:每个broker和每个controller 都必须设置 controller.quorum.voters。
listeners=PLAINTEXT://:9092,CONTROLLER://:9093   //不同服务器绑定的端口,启动后会生成9092、9093两个端口。broker将使用9092端口,而kraft controller控制器将使用9093端口,如果明确本节点为控制节点,则控制节点9093必须写上。
# 套接字服务器侦听的地址.
# 组合节点(即具有`process.roles=broker,controller`的节点)必须至少在此处列出控制器侦听器
# 如果没有定义代理侦听器,那么默认侦听器将使用一个等于java.net.InetAddress.getCanonicalHostName()值的主机名,
# 带有PLAINTEXT侦听器名称和端口9092
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
#不同服务器绑定的端口
CONTROLLER://:10000 本节点作为Controller节点,监听本机所有可用网卡的10000端口(使用10000端口作为控制器端口)inter.broker.listener.name=PLAINTEXT    //broker 服务协议别名。任何角色节点必须设置,并且参数值一致。用于代理之间通信的侦听器的名称(broker 服务协议别名)
advertised.Listeners=PLAINTEXT://hadoop102:9092     //可不配置,除非需要。broker对外暴露的地址,如果都是局域网使用,就配置PLAINTEXT://:9092即可。如果未设置,则使用"listeners"的值。
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL     //#协议别名到安全协议的映射。# 将侦听器名称映射到安全协议,默认情况下它们是相同的。(协议别名到安全协议的映射)有关更多详细信息,请参阅配置文档。log.dirs=/opt/module/kafka2/data      //kafka 数据存储目录

修改日志配置文件

vim   /path/config/log4j.properties

添加两条日志最大量

log4j.appender.kafkaAppender.MaxFileSize=100MB
log4j.appender.kafkaAppender.MaxBackupIndex=5

修改DatePattern

log4j.appender.kafkaAppender.DatePattern='.'yyyy-MM-dd

创建kraft集群

生成集群id:
在任意一个kafka节点上执行就行,初始化集群数据目录,首先生成存储目录唯一 ID。生成后保存生成的字符串。这个集群ID事实上是一个长度16位的字符串通过Base64编码后得来的,因此你也可以不使用上述命令,直接自定义一个16位长度的纯英文和数字组成的字符串,然后将这个字符串编码为Base64格式作为这个集群ID也可以。可以使用 菜鸟工具中的在线Base64编码工具。

[root@kafka01 bin]# /usr/local/kafka3.5-kraft-controller/bin/kafka-storage.sh random-uuid
zsP5CeHlRdG0YoVrdTgm5w

格式化所有kafka节点数据目录:
然后分别在每个kafka进程执行下面命令,用该 ID 格式化 kafka 存储目录。完成集群元数据配置,-t指定刚才生成的字符串

如果是本文档三controller节点,三broker节点分离部署方案,那么6个kafka进程都要执行,一共执行6次。
首先格式化3个controller:每个controller节点必须执行,一共执行3次。

[root@kafka01 bin]# /usr/local/kafka3.5-kraft-controller/bin/kafka-storage.sh format -t zsP5CeHlRdG0YoVrdTgm5w -c /usr/local/kafka3.5-kraft-controller/config/kraft/server.properties 
Formatting /kafkacontroller with metadata.version 3.5-IV2.

其次格式化3个broker:每个broker节点必须执行,一共执行3次。

[root@kafka18 kraft]# /usr/local/kafka3.5-kraft/bin/kafka-storage.sh format -t zsP5CeHlRdG0YoVrdTgm5w -c /usr/local/kafka3.5-kraft/config/kraft/server.properties 
Formatting /kafkabroker with metadata.version 3.5-IV2.

查看controller数据目录:

[root@kafka01 bin]# cd /kafkacontroller/
You have new mail in /var/spool/mail/root
[root@kafka01 kafkacontroller]# ll
total 8
-rw-r--r-- 1 root root 249 Aug 19 07:17 bootstrap.checkpoint
-rw-r--r-- 1 root root  86 Aug 19 07:17 meta.properties[root@kafka01 kafkacontroller]# cat meta.properties 
#
#Mon Aug 19 07:17:27 EDT 2024
node.id=1        //每个角色每个节点,此id必须唯一
version=1
cluster.id=zsP5CeHlRdG0YoVrdTgm5w     //每个kafka节点id会一致,就是之前命令生成的

查看broker数据目录:

[root@kafka01 kafkacontroller]# cd /kafkabroker/
[root@kafka01 kafkabroker]# ll
total 8
-rw-r--r-- 1 root root 249 Aug 19 07:21 bootstrap.checkpoint
-rw-r--r-- 1 root root  86 Aug 19 07:21 meta.properties[root@kafka01 kafkabroker]# cat meta.properties 
#
#Mon Aug 19 07:21:40 EDT 2024
node.id=2
version=1
cluster.id=zsP5CeHlRdG0YoVrdTgm5w

启动kafka kraft集群

启动方式与传统模式启动方法一样。首先启动3个controller节点,最后启动3个broker节点
首先启动controller节点:

/usr/local/kafka3.5-kraft-controller/bin/kafka-server-start.sh  -daemon  /usr/local/kafka3.5-kraft-controller/config/kraft/server.properties 

其次启动broker节点:

/usr/local/kafka3.5-kraft/bin/kafka-server-start.sh -daemon  /usr/local/kafka3.5-kraft/config/kraft/server.properties 

查看kafka进程

ps  aux | grep  kafka
ps -ef |  grep kafka

查看日志

tail  -f  server.log

启动后kafka会生成9092、9093两个端口,controller通信端口:9093, 作用与zk的2181端口类似 。

[root@kafka01 kafkabroker]# ss -lnt| grep -E '9092|9093'
LISTEN     0      50        ::ffff:192.168.40.11:9092                    :::*                  
LISTEN     0      50        ::ffff:192.168.40.11:9093                    :::*        

关闭kraft集群

/usr/local/kafka_2.13-3.5.0/bin/kafka-server-stop.sh

查看controller数据目录内容

[root@kafka18 kraft]# cd /kafkacontroller/
[root@kafka18 kafkacontroller]# ll
total 8
-rw-r--r-- 1 root root 249 Aug 19 07:19 bootstrap.checkpoint
drwxr-xr-x 2 root root 187 Aug 19 07:56 __cluster_metadata-0
-rw-r--r-- 1 root root  86 Aug 19 07:19 meta.properties
[root@kafka18 kafkacontroller]# cd __cluster_metadata-0/
[root@kafka18 __cluster_metadata-0]# ll
total 60
-rw-r--r-- 1 root root 10485760 Aug 19 08:00 00000000000000000000.index
-rw-r--r-- 1 root root    37053 Aug 19 08:00 00000000000000000000.log
-rw-r--r-- 1 root root 10485756 Aug 19 08:00 00000000000000000000.timeindex
-rw-r--r-- 1 root root       14 Aug 19 07:56 leader-epoch-checkpoint
-rw-r--r-- 1 root root       43 Aug 19 07:55 partition.metadata
-rw-r--r-- 1 root root      154 Aug 19 07:56 quorum-state

三台controller的文件相同

[root@kafka14 __cluster_metadata-0]# cat leader-epoch-checkpoint 
0
2
15 0
21 3

三台controller的文件相同

[root@kafka14 __cluster_metadata-0]# cat partition.metadata 
version: 0
topic_id: AAAAAAAAAAAAAAAAAAAAAQ

三台controller的文件相同

[root@kafka01 __cluster_metadata-0]# cat quorum-state 
{"clusterId":"","leaderId":3,"leaderEpoch":21,"votedId":-1,"appliedOffset":0,"currentVoters":[{"voterId":1},{"voterId":3},{"voterId":5}],"data_version":0}

查看broker数据目录内容

[root@kafka01 kafkabroker]# ll
total 16
-rw-r--r-- 1 root root 249 Aug 19 07:21 bootstrap.checkpoint   //需要特殊命令查看
-rw-r--r-- 1 root root   0 Aug 19 07:56 cleaner-offset-checkpoint 
drwxr-xr-x 2 root root 237 Aug 19 08:56 __cluster_metadata-0
-rw-r--r-- 1 root root   4 Aug 19 09:05 log-start-offset-checkpoint   
-rw-r--r-- 1 root root  86 Aug 19 07:21 meta.properties
-rw-r--r-- 1 root root   4 Aug 19 09:05 recovery-point-offset-checkpoint   
-rw-r--r-- 1 root root   0 Aug 19 07:56 replication-offset-checkpoint   

三节点都是2个0

[root@kafka01 kafkabroker]# cat log-start-offset-checkpoint
0
0

三节点都一样

[root@kafka01 kafkabroker]# cd __cluster_metadata-0/
[root@kafka01 __cluster_metadata-0]# ll
total 1048
-rw-r--r-- 1 root root 10485760 Aug 19 09:09 00000000000000000000.index
-rw-r--r-- 1 root root   643365 Aug 19 09:10 00000000000000000000.log
-rw-r--r-- 1 root root 10485756 Aug 19 09:09 00000000000000000000.timeindex
-r-------- 1 root root      555 Aug 19 08:56 00000000000000007186-0000000021.checkpoint
-rw-r--r-- 1 root root       14 Aug 19 07:56 leader-epoch-checkpoint
-rw-r--r-- 1 root root       43 Aug 19 07:56 partition.metadata
-rw-r--r-- 1 root root      154 Aug 19 07:56 quorum-state
[root@kafka01 __cluster_metadata-0]# cat leader-epoch-checkpoint 
0
2
15 0
21 3
[root@kafka01 __cluster_metadata-0]# cat partition.metadata 
version: 0
topic_id: AAAAAAAAAAAAAAAAAAAAAQ[root@kafka01 __cluster_metadata-0]# cat quorum-state 
{"clusterId":"","leaderId":3,"leaderEpoch":21,"votedId":-1,"appliedOffset":0,"currentVoters":[{"voterId":1},{"voterId":3},{"voterId":5}],"data_version":0}

生产消费测试
1)创建topic

/usr/local/kafka3.5-kraft/bin/kafka-topics.sh --bootstrap-server 192.168.40.11:9092 --create --topic kr --replication-factor 3 --partitions 3
Created topic kr.

2)查看创建的topic

[root@kafka01 __cluster_metadata-0]# /usr/local/kafka3.5-kraft/bin/kafka-topics.sh --bootstrap-server 192.168.40.11:9092 --describe
Topic: kr	TopicId: YsV3On2zSZ-PatanbdwouA	PartitionCount: 3	ReplicationFactor: 3	Configs: segment.bytes=1073741824Topic: kr	Partition: 0	Leader: 4	Replicas: 4,6,2	Isr: 4,6,2Topic: kr	Partition: 1	Leader: 6	Replicas: 6,2,4	Isr: 6,2,4Topic: kr	Partition: 2	Leader: 2	Replicas: 2,4,6	Isr: 2,4,6

3)生产消息

[root@kafka01 __cluster_metadata-0]# /usr/local/kafka3.5-kraft/bin/kafka-console-producer.sh --bootstrap-server 192.168.40.11:9092 --topic kr
>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
>cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
>dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
>eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

4)消费消息

]#  /usr/local/kafka3.5-kraft/bin/kafka-console-consumer.sh --bootstrap-server 192.168.40.11:9092 --topic kr  --from-beginning
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

每个broker数据目录都生成了offset目录和topic目录

[root@kafka01 kafkabroker]# ll
total 20
-rw-r--r-- 1 root root 249 Aug 19 07:21 bootstrap.checkpoint
-rw-r--r-- 1 root root   0 Aug 19 07:56 cleaner-offset-checkpoint
drwxr-xr-x 2 root root 237 Aug 19 08:56 __cluster_metadata-0
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-1
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-11
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-12
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-17
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-18
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-21
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-24
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-28
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-32
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-34
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-38
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-41
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-42
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-47
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-49
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-5
drwxr-xr-x 2 root root 167 Aug 19 09:32 __consumer_offsets-6
drwxr-xr-x 2 root root 167 Aug 19 09:15 kr-0
drwxr-xr-x 2 root root 167 Aug 19 09:15 kr-1
drwxr-xr-x 2 root root 167 Aug 19 09:15 kr-2
-rw-r--r-- 1 root root   4 Aug 19 09:35 log-start-offset-checkpoint
-rw-r--r-- 1 root root  86 Aug 19 07:21 meta.properties
-rw-r--r-- 1 root root 431 Aug 19 09:35 recovery-point-offset-checkpoint
-rw-r--r-- 1 root root 431 Aug 19 09:35 replication-offset-checkpoint

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷rabbitmq2024 集群篇仲裁队列 第52节 答疑

我们希望创建一个队列,队列分布在各个节点上,仲裁队列很好的解决了这个问题.那么在仲裁队列之前,创建一个队列,队列不是分布在各个节点上的吗? 在RabbitMQ中,默认情况下创建的队列是“普通队列”&#xff0…

Oracle T5-2 ILOM配置

ILOM管理口ip地址配置 连接控制器(SP)串口(RJ45),进行系统设置 (缺省:9600,8-n-1,root/changeme) …………………. ORACLESP-AK02566506 login: root Password: Detecting screen size; pl…

EditText的inputType 详解

EditText的inputType属性用于指定EditText接受的输入类型,它可以通过XML布局文件或代码来设置。‌ 该属性决定了EditText在键盘弹出时的样式和功能,例如是否显示数字键盘、是否允许输入特殊字符等。通过设置不同的InputType,可以限制用户输入…

Axure重要元件三——中继器

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 本节课:中继器 课程内容:认识中继器、中继器基本操作、中继器案例 应用场景:高级表单交互 一、认识中继器 我们不从理论视角去展示…

MySQL InnoDB Buffer Pool空间不足导致查询变慢

问题现象 前端调用后台服务查询接口响应很慢,查看 MySQL 的日志,有如下日志: [Warning] InnoDB: Difficult to find free blocks in the buffer pool (13430 search iterations)! 13430 failed attempts to flush a page! Consider increas…

Android Framework AMS(05)startActivity分析-2(ActivityThread启动到Activity拉起)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读AMS通过startActivity启动Activity的整个流程的整个流程的第二阶段:从ActivityThread启动到Activity拉起。 第一阶段文…

【Vue】Vue(八)Vue3.0 使用ref 和 reactive创建响应式数据

ref 创建:基本类型的响应式数据 **作用:**定义响应式变量。语法:let xxx ref(初始值)。**返回值:**一个RefImpl的实例对象,简称ref对象或ref,ref对象的value属性是响应式的。注意点: JS中操作…

《拿下奇怪的前端报错》:1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点

问题背景 在一个使用MongoDB GridFS实现文件存储和分片读取的项目中,同事遇到了一个令人困惑的问题:音频文件总是丢失最后几秒,视频文件也出现类似情况。更奇怪的是,播放器显示的总时长为无限大。这个问题困扰了团队成员几天&…

Java项目-基于Springboot的应急救援物资管理系统项目(源码+说明).zip

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

工业自动化为什么依赖光耦隔离器 --- 腾恩科技

光耦合器隔离器在工业自动化中必不可少,可确保信号传输,同时保护敏感电子设备和人员免受高压影响。选择合适的光耦合器隔离器取决于对操作环境和隔离要求的了解。本文将重点介绍在为工业应用选择光耦合器隔离器时需要考虑的关键因素。 光耦合器隔离器在工…

上传图片到github上,生成链接在Typora中使用(解决Typora的md文件在分享时的丢失问题)

上传图片到github上,生成链接在Typora中使用(解决Typora的md文件在分享时的丢失问题) 在GitHub上从操作 创建一个 GitHub 仓库: 登录 GitHub,创建一个新的仓库来存储图片。 生成 GitHub 令牌: 在 GitHub 中,前往“Settings” > “Developer settings” > “Pers…

AUTOSAR_EXP_ARAComAPI的5章笔记(12)

☞返回总目录 5.4.6 方法 骨架侧的服务方法是抽象方法,必须由继承骨架的服务实现子类进行重写。让我们来看一下我们服务示例中的 Adjust 方法: /*** 对于所有输出和非空返回参数* 生成一个包含非空返回值和/或输出参数的封装结构。*/ struct AdjustOu…

docker网络连接模式详解

五种模式对比 bridge/桥接网络:适用于大多数单主机场景,提供基本的网络隔离和通信。 HOST/主机网络:适用于需要高性能和直接网络访问的场景。 NONE/无网络:适用于不需要网络访问的容器,增加安全性。 container/容器网…

UE4 材质学习笔记08(雨滴流淌着色器/雨水涟漪着色器)

一.雨滴流淌着色器 法线贴图在红色通道和绿色通道上,那是法线的X轴和Y轴,在蓝色通道中 我有个用于雨滴流淌的蒙版,在Alpha通道中,有个时间偏移蒙版。这些贴图都是可以在PS上制作做来的,雨滴流淌图可以直接用笔刷画出来…

永恒之蓝漏洞

MS17-010是微软于2017年3月发布的一个安全补丁,旨在修复Windows操作系统中的一个严重漏洞,该漏洞被称为“永恒之蓝”(EternalBlue)。这个漏洞影响了Windows的Server Message Block(SMB)协议,允许…

Java集合剖析3】ArrayList

目录 拓展 1. 在面试时如何讲解一个集合的底层? 2. IDEA如何查看底层源码? 一、ArrayList底层数据结构 二、插入方法的具体实现 三、ArrayList底层原理总结 拓展 1. 在面试时如何讲解一个集合的底层? 底层的数据结构。插入方法的具体实现。…

vue综合指南(六)

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南 目录 101、Vue 框架怎么实现对象和数组的监听? 102、Proxy 与 Object.d…

10 分钟使用豆包 MarsCode 帮我搭建一套后台管理系统

以下是「 豆包MarsCode 体验官」优秀文章,作者把梦想揉碎。 十分钟使用豆包 MarsCode 搭建后台管理项目 在这个快节奏的时代,开发者们总是希望能够快速、高效地完成项目的搭建与开发工作。无论是初创企业还是大型公司,后台管理系统都是必不可…

SpringBoot1~~~

目录 快速入门 依赖管理和自动配置 修改自动仲裁/默认版本号 starter场景启动器 自动配置 修改默认扫描包结构 修改默认配置 读取application.properties文件 按需加载原则 容器功能 Configuration Import ​编辑 Conditional ImportResource 配置绑定Configur…

要在 Git Bash 中使用 `tree` 命令,下载并手动安装 `tree`。

0、git bash 安装 git(安装,常用命令,分支操作,gitee,IDEA集成git,IDEA集成gitee,IDEA集成github,远程仓库操作) 1、下载并手动安装 tree 下载 tree.exe 从 tree for Windows 官方站点 下载 tree 的 Windows 可执行文件。tree for Window:https://gnuwin32.source…