知识补充:

Kafka 和 ZooKeeper 的关系可以用 “协作依赖” 来概括。在 Kafka 的早期版本(Kafka 2.8.0 之前)中,ZooKeeper 是 Kafka 的核心依赖,用于管理集群元数据、协调 Broker 和 Controller 选举等关键功能。但从 Kafka 3.0+ 开始,官方逐步引入了 KRaft(Kafka Raft Metadata)模式,允许 Kafka 完全脱离 ZooKeeper 独立运行。


1. ZooKeeper 在 Kafka 中的作用(传统架构)

在旧版 Kafka(依赖 ZooKeeper 的版本)中,ZooKeeper 主要负责以下任务:

(1) 集群元数据管理
  • 存储 Kafka 集群的元数据,例如:

    • Broker 列表(哪些 Broker 在线/离线)

    • Topic 和 Partition 信息(Topic 的分区数量、副本分布)

    • Consumer Group 的 offset(消费进度)(旧版本由 ZooKeeper 存储,新版 Kafka 已改用内部 Topic __consumer_offsets

(2) Controller 选举
  • Kafka 集群中的 Controller 负责管理 Partition Leader 选举、Broker 上下线等关键任务。

  • ZooKeeper 用于选举唯一的 Controller,避免脑裂(Split-Brain)问题。

(3) Broker 健康监测
  • Broker 启动时会在 ZooKeeper 注册临时节点(Ephemeral Node),如果 Broker 崩溃,ZooKeeper 会检测到并触发 Controller 重新分配 Partition。

(4) Topic 配置管理
  • 存储 Topic 的配置信息(如 cleanup.policyretention.ms 等)。


2. Kafka 脱离 ZooKeeper(KRaft 模式)

从 Kafka 2.8.0(实验性支持) 和 Kafka 3.0+(正式生产可用) 开始,Kafka 引入了 KRaft(Kafka Raft Metadata)模式,使用 Raft 共识算法 替代 ZooKeeper,实现完全去 ZooKeeper 化:

KRaft 模式的核心变化
  1. 不再依赖 ZooKeeper

    • Kafka 用自己的 Raft 协议 管理元数据,减少外部依赖。

    • 降低了运维复杂度(不需要额外维护 ZooKeeper 集群)。

  2. Controller 角色增强

    • 在 KRaft 模式下,部分 Broker 会承担 Controller 角色,使用 Raft 协议进行 Leader 选举和元数据同步。

  3. 性能提升

    • 减少了 ZooKeeper 的网络开销,元数据访问更快。

    • 启动时间更短(不再需要等待 ZooKeeper 连接)。

  4. 更稳定的集群管理

    • Raft 协议比 ZooKeeper 的 ZAB 协议更简单,减少了潜在的一致性问题。


3. 如何区分 Kafka 是否依赖 ZooKeeper?

特征依赖 ZooKeeper 的 KafkaKRaft 模式(无 ZooKeeper)
Kafka 版本< 2.8.0(必须依赖)≥ 2.8.0(实验性支持)
≥ 3.0(生产可用)
配置文件server.properties 需要配置 zookeeper.connectserver.properties 配置 process.roles=broker,controller
启动方式需先启动 ZooKeeper直接启动 Kafka,无需 ZooKeeper
元数据存储存储在 ZooKeeper存储在 Kafka 内部 Topic(__cluster_metadata

4. 如何选择?

  • 如果使用 Kafka ≤ 2.8.0:必须依赖 ZooKeeper。

  • 如果使用 Kafka 3.0+

    • 新集群:建议直接使用 KRaft 模式(更简单、更高效)。

    • 旧集群迁移:可以从 ZooKeeper 模式逐步迁移到 KRaft。


5. 总结

  • 传统 Kafka:强依赖 ZooKeeper,用于元数据管理、Controller 选举等。

  • 现代 Kafka(KRaft):自包含元数据管理,不再需要 ZooKeeper,简化了架构。

如果你的 Kafka 版本较新(≥3.0),建议尝试 KRaft 模式,减少运维负担!

我选择的版本是Kafka 3.6.0

两种运行模式

(1) KRaft 模式(推荐,无需 ZooKeeper)

Kafka 3.6.0 默认支持 KRaft,通过 Raft 协议管理元数据,无需额外部署 ZooKeeper。

(2) ZooKeeper 模式(旧版兼容)

仍然可以使用 ZooKeeper,但官方推荐逐步迁移到 KRaft。

建议:

  • Kafka 3.6.0 默认支持 KRaft(无需 ZooKeeper),推荐新集群使用。

  • 旧版兼容 ZooKeeper 模式,但未来版本可能移除。

  • 启动前注意

    • KRaft 模式需要 format 存储目录。

    • ZooKeeper 模式需先启动 ZooKeeper。

实验开始

一、单机kafka部署

1.下载所需kafka的tgz文件

Apache Kafka

版本看自己需要去选择

以我为例,我下载的是

(1) Scala 是什么?

Scala 是一种运行在 JVM 上的多范式编程语言,Kafka 的核心代码是用 Scala 编写的。虽然 Kafka 提供 Java API(用户无需直接使用 Scala),但其底层依赖 Scala 的运行时库。


(2)为什么 Kafka 分 Scala 2.12 和 2.13 版本?

  • 历史原因:Kafka 早期用 Scala 开发,保留了多版本编译的支持。

  • 兼容性:不同 Scala 版本的二进制不兼容,需匹配用户环境的依赖库(如 Spark、Flink 等可能依赖特定 Scala 版本)。

(3)选择总结

  • 普通用户:直接选择 kafka_2.13-3.6.0.tgz(推荐)。

  • 大数据生态用户:根据 Spark/Flink 的 Scala 版本选择匹配的 Kafka 版本。

  • 无需纠结:若不涉及 Scala 开发,版本选择对 Kafka 使用无实质影响。

选scala12还是scala13,对于本实验,其实都可以,看自己选择

注意:要有java环境!

没有的可自行配置,只需要下载jdk包上传解压缩改名然后配置环境变量即可

不会的可以参考本人博客,第二部分就是Java的安装配置

保姆级tomcat的静态页面部署(下载安装+部署)-CSDN博客

 

2.上传虚拟机并进行解压缩改名

我是上传在了/opt/soft的目录下,加压缩后移动到了/opt/module下面

可自行选择目录,如果想跟我一样可创建目录/opt/soft和/opt/module

 3.添加kafka的环境变量如下

# 1. 编辑配置文件
vim /etc/profile

# 2. 添加以下内容(如果尚未添加)

export KAFKA_HOME=/opt/module/kafka

export PATH=$PATH:$KAFKA_HOME/bin

# 3. 加载配置
source /etc/profile

 4.启动karka单机
方式 1:KRaft 模式(推荐)

(1) 生成集群 UUID

cd kafka
./bin/kafka-storage.sh random-uuid
# 输出示例:rGgTf5XkQZq5lw3Z4g7hJw

(2) 格式化存储目录

./bin/kafka-storage.sh format -t <生成的UUID> -c ./config/kraft/server.properties

(3) 启动 Kafka

./bin/kafka-server-start.sh ./config/kraft/server.properties

📌 注意

  • kraft/server.properties 是 KRaft 专用配置,不再需要 zookeeper.connect

  • 默认监听 9092 端口(普通 Broker)和 9093 端口(Controller)。

方式2: 以传统模式(依赖 ZooKeeper)启动 Kafka

(1) 先启动 ZooKeeper

./bin/zookeeper-server-start.sh ./config/zookeeper.properties &

& 表示后台运行,避免占用终端)

(2) 再启动 Kafka

./bin/kafka-server-start.sh ./config/server.properties

📌 注意

  • 确保 server.properties 中配置了 zookeeper.connect=localhost:2181(默认已配置)。

  • 如果启动失败,检查日志 logs/server.log

验证 :Kafka 是否正常运行

(1)检查 ZooKeeper 是否注册了 Kafka 节点

./bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids

如果返回 [0] 或类似,表示 Broker 已注册。

(2)创建 Topic 测试

./bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test --partitions 1 --replication-factor 1

注意
在 Kafka 3.6.0 中,--zookeeper 参数已被移除,必须改用 --bootstrap-server

./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 1 --replication-factor 1

(3) 列出 Topic

./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

应输出 test

停止当前 Kafka 服务

(1)如果是 KRaft 模式启动的 Kafka

# 查找 Kafka 进程 ID
ps aux | grep kafka | grep server.properties

# 强制停止(如果没有优雅停止脚本)
kill -9 <PID>

(2)如果是 ZooKeeper 模式启动的 Kafka

# 使用 Kafka 自带的停止脚本(如果有)
./bin/kafka-server-stop.sh

# 如果没有效果,手动停止
ps aux | grep kafka | grep server.properties
kill -9 <PID>
bash
# 停止所有 Kafka 相关进程
pkill -f 'kafka.Kafka'

(3)停止 ZooKeeper(如果正在运行)

./bin/zookeeper-server-stop.sh

# 如果无效,手动停止
ps aux | grep zookeeper
kill -9 <PID>

(4)确认进程已关闭

bash

ps aux | grep -E "kafka|zookeeper"

确保没有任何 Kafka 或 ZooKeeper 相关进程残留。

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

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

相关文章

华控智能产品特点——产品生态全景与场景化创新

公司构建 “3X”产品战略&#xff0c;以三大核心场景为基础持续拓展技术外延&#xff1a; 1. 智能安防产品线军工级指纹枪盒&#xff1a;采用6061-T6航空铝材&#xff0c;内嵌震动报警模块&#xff0c;非法开箱触发90dB警鸣。为军工企业定制的双人认证版本需两位授权人员同时验…

爬虫核心原理与入门技巧分析

一、爬虫核心原理&#xff1a;模拟人类浏览的“自动化工具” 简单来说&#xff0c;网络爬虫&#xff08;Web Crawler&#xff09;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或脚本。其核心原理可以类比人类浏览网页的过程&#xff0c;只不过将手动操作转化为了代…

spring-cloud微服务部署-feign服务间调用

1 准备工作 需要安装并启动nacos&#xff0c;作为服务注册中心。地址&#xff1a;https://nacos.io/ 2 项目结构 parent的pom.xml声明依赖&#xff1a; <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</gr…

IDEA高效开发:Database Navigator插件安装与核心使用指南

目录 1.前言 2.正文 2.1安装流程 2.1.1IDE内部安装 2.1.2手动下载安装 ⚠️ 避坑指南 2.2使用教程 2.2.1连接数据库 2.2.2查看数据库/表 2.2.3查询数据 2.2.4修改表结构 2.2.5生成代码 2.2.6常见故障排除 3.小结 1.前言 “作为Java开发者&#xff0c;日常与数据…

Maven私服仓库,发布jar到私服仓库,依赖的版本号如何设置,规范是什么

Maven私服仓库&#xff0c;发布jar到私服仓库&#xff0c;依赖的版本号如何设置&#xff0c;规范是什么

量子卷积神经网络:量子计算与深度学习的融合革命

引言&#xff1a;当卷积神经网络遇上量子计算在人工智能与量子计算双重浪潮的交汇处&#xff0c;量子卷积神经网络&#xff08;Quantum Convolutional Neural Network, QCNN&#xff09;正成为突破经典算力瓶颈的关键技术。传统卷积神经网络&#xff08;CNN&#xff09;在图像识…

线程(三) linux 同步

目录 概念补充 条件变量 操作 例:多线程抢票 封装 生产者消费者模型 生产者和消费者之间的关系 BlockQueue(阻塞队列) 单生产单消费 信号量 简介 操作 多生产者多消费者RingQueue(环形队列)代码 sem封装 信号量与锁 小知识 概念补充 同步:在保证数据安全的前…

Eclipse 生成 jar 包

Eclipse 生成 jar 包 引言 Eclipse 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛应用于 Java 开发领域。在 Java 开发过程中&#xff0c;将源代码编译成可执行的 jar 包是常见的需求。本文将详细介绍在 Eclipse 中生成 jar 包的方法&#xff0c;包…

kafka--基础知识点--0

kafka 架构 https://cloud.tencent.com/developer/article/2307892 19张图 生产者架构 消息的磁盘存储文件结构 https://cloud.tencent.com/developer/article/2307892 19张图 produce消息分区策略 kafka–基础知识点–5–生产者分区策略 ISR、OSR、AR 是什么&#xff1…

替换ngnix ssl 证书

1. 阿里云数字证书管理服务 -》SSL 证书管理 -》个人测试证书&#xff08;原免费证书&#xff09;-》查找相应域名的证书/新建证书&#xff0c;申请 -》下载证书&#xff0c;如果是ngnix服务器&#xff0c;就下载pem/key格式2.远程连接服务器a.nginx -t :查看ngnix 配置文件在哪…

rabbitmq ACK

在消息队列&#xff08;如 RabbitMQ&#xff09;中&#xff0c;**ACK&#xff08;Acknowledgement&#xff09;是消息确认机制**&#xff0c;用于确保消息被消费者成功处理。其核心作用是解决以下问题&#xff1a;mermaid复制代码导出svg&#x1f4cc; ACK 的两种模式1. 自动确…

性能远超Spring Cloud Gateway!Apache ShenYu如何重新定义API网关!

Apache ShenYu Apache ShenYu是一个异步的&#xff0c;高性能的&#xff0c;跨语言的&#xff0c;响应式的 API 网关。 特点 • 代理&#xff1a;支持Apache Dubbo&#xff0c;Spring Cloud&#xff0c;gRPC&#xff0c;Motan&#xff0c;SOFA&#xff0c;TARS&#xff0c;We…

质变科技亮相可信数据库发展大会,参编《数据库发展研究报告2025》

数据库作为支撑数据存储与计算的关键载体&#xff0c;在数据要素时代的重要性愈发凸显。过去一年&#xff0c;全球数据库新技术、新业态、新模式不断涌现&#xff1b;我国数据库应用创新于重点行业快速推进。随着人工智能技术深刻变革&#xff0c;数据库与AI融合趋势愈发明显。…

LVS(Linux Virtual Server)详细笔记(理论篇)

一.详解1. LVS概述LVS&#xff08;Linux Virtual Server&#xff09;是由章文嵩博士发起的开源负载均衡项目&#xff0c;通过在Linux内核中实现高性能四层交换能力&#xff0c;将多台物理服务器组织成单一虚拟服务。它能够处理百万级并发连接&#xff0c;同时保持线性扩展能力&…

Oracle Data Pump 导入冲突解决

问题场景 使用 impdp 导入数据时遇到"对象已存在"错误&#xff0c;导致导入失败。 核心解决方案 1. TABLE_EXISTS_ACTION 参数 impdp username/passworddatabase \ directoryDATA_PUMP_DIR \ dumpfileyour_dump_file.dmp \ TABLE_EXISTS_ACTIONREPLACE作用&#xff1…

汽车免拆诊断案例 | 2015款进口起亚索兰托L车漏电

故障现象 一辆2015款进口起亚索兰托L车&#xff0c;搭载D4HB发动机&#xff0c;累计行驶里程约为15万km。车主反映&#xff0c;该车停放2天左右就因蓄电池亏电而无法起动&#xff0c;更换过蓄电池&#xff0c;但故障依旧&#xff0c;于是将车开至我厂检修。故障诊断 接车后用…

mysql复制延迟如何处理

一、复制延迟的原因主库增删改并发大大表在做DDL从库备份导致延迟大事务从库机器配置差二、怎样判断延迟使用 SHOW SLAVE STATUS 命令Seconds_Behind_Master&#xff1a;表示从库落后主库的秒数&#xff08;若为 NULL&#xff0c;可能复制线程已停止&#xff09;对比位点字段名…

HertzBeat 监控 SpringBoot 使用案例

HertzBeat 监控 SpringBoot 使用案例 在云原生时代&#xff0c;Spring Boot应用的监控与可视化已然成为运维体系的核心环节&#xff0c;实时监控应用性能是保障系统稳定性的关键。 这篇文章将结合 HertzBeat 实现从指标采集、可视化到告警的一体化解决方案&#xff0c;并展示…

突破性量子芯片问世:电子与光子首次集成,开启量子技术规模化应用新篇章

文丨浪味仙 排版丨浪味仙行业动向&#xff1a;3000字丨8分钟阅读内容提要在量子技术迈向规模化应用的征程中&#xff0c;研究人员迎来了重要突破。近日&#xff0c;波士顿大学、加州大学伯克利分校以及西北大学的科学家在《Nature Electronics》上发表论文&#xff0c;报告实现…

day30——零基础学嵌入式之线程2.0

一、进程和线程的对比线程进程定义轻量级的进程。是进程中的执行单元&#xff0c;作为CPU调度的基本单位进程时程序的一次执行过程&#xff0c;作为CPU的资源分配的基本单位优势创建以及切换速度块-----效率高线程&#xff08;线程共享了进程的资源&#xff09;间共享资源方便创…