当前位置: 首页 > news >正文

Kafka06-进阶-尚硅谷

3-Kafka进阶

文章目录

    • 3-Kafka进阶
    • @[toc]
      • 3.1 Controller选举
        • 3.1.1 什么是Controller?
        • 3.1.2 如何选出Controller?
        • 3.1.3 脑裂与epoch
      • 3.2 Broker上下线感知
        • 3.2.1 监听机制
      • 3.3 数据偏移量定位
        • 3.3.1 分区物理结构
        • 3.3.2 稀疏索引
      • 3.4 Topic删除
      • 3.5 日志清理/压缩
        • 3.5.1 时间/大小删除(delete)
        • 3.5.2 日志压缩(compact)
      • 3.6 页缓存(PageCache)
      • 3.7 零拷贝
      • 3.8 顺序写日志
      • 3.9 Linux集群部署(3节点)
        • 3.9.1 规划
        • 3.9.2 关键脚本
      • 3.10 Kafka-Eagle监控
      • 3.11 KRaft模式(无ZooKeeper)
        • 3.11.1 优势
        • 3.11.2 部署要点

3.1 Controller选举

3.1.1 什么是Controller?
  • Kafka集群唯一“大脑”,负责分区Leader选举、副本迁移、Topic创建/删除等全局协调工作。
3.1.2 如何选出Controller?
  • 所有Broker抢先在ZooKeeper创建/controller临时节点,成功者即为Controller;其余Broker监听该节点变化。
3.1.3 脑裂与epoch
  • 网络抖动可能导致旧Controller“复活”。Kafka为每次选举递增epoch(纪元),Broker发现epoch小于当前值即主动退位,避免脑裂。

3.2 Broker上下线感知

3.2.1 监听机制
  • Controller启动时在ZK注册大量Watcher,关键路径:/brokers/ids
  • Broker上线:创建临时节点/brokers/ids/{brokerId};Controller立即同步元数据。
  • Broker下线:会话超时节点消失;Controller将该Broker上的Leader分区重新选举并通知全网。

3.3 数据偏移量定位

3.3.1 分区物理结构
  • 每个Partition→多个Segment文件(.log/.index/.timeindex)。
  • 文件名=该段起始offset,固定20位数字。
3.3.2 稀疏索引
  • 默认每写4KB(log.index.interval.bytes)才在.index写一条entry:相对offset(4B)+物理position(4B)。
  • 查找时先跳跃表定位Segment,再用二分找不大于目标offset的索引项,顺序扫描.log。

3.4 Topic删除

方式场景关键步骤
快速配置允许停机delete.topic.enable=true+kafka-topics.sh --delete
策略删除长期保留设置log.cleanup.policy=delete+时间/大小阈值
手动删除不能改配置删除ZK元数据/brokers/topics/{topic}+各Broker本地日志目录

3.5 日志清理/压缩

3.5.1 时间/大小删除(delete)
  • 全局阈值:log.retention.hours=168log.retention.bytes=-1
  • Segment级按最大时间戳判断,只要有一条未过期即保留整段。
3.5.2 日志压缩(compact)
  • log.cleanup.policy=compact:相同key仅保留最新记录,用于状态类Topic

3.6 页缓存(PageCache)

  • 生产者顺序写→先写OS页缓存,由内核异步刷盘;消费者读命中缓存即内存级速度。
  • 参数log.flush.interval.messages/ms可强制同步刷盘,但推荐用多副本保可靠而非同步刷盘。

3.7 零拷贝

  • 消费/副本同步时,通过sendfile系统调用,数据直接页缓存→网卡,省去用户态与内核态来回拷贝,单磁盘顺序读可达600MB/s。

3.8 顺序写日志

  • 仅追加写ByteBuffer,满刷盘;避免随机寻址,性能远高于随机写(600MB/s vs 100KB/s)。

3.9 Linux集群部署(3节点)

3.9.1 规划
节点IP角色
kafka-broker1192.168.10.101ZK+Kafka
kafka-broker2192.168.10.102ZK+Kafka
kafka-broker3192.168.10.103ZK+Kafka
3.9.2 关键脚本
  • xsync:循环rsync文件到各节点。
  • zk.sh start|stop|status:一键启停ZK集群。
  • kfk.sh start|stop:一键启停Kafka集群。
  • cluster.sh start|stop:先启ZK再启Kafka,关闭时顺序相反并等待Kafka进程归零。

3.10 Kafka-Eagle监控

  • 依赖MySQL存储指标;修改kafka-server-start.sh增加JMX端口9999
  • 配置system-config.properties后,ke.sh start启动,访问http://broker1:8048(admin/123456)。

3.11 KRaft模式(无ZooKeeper)

3.11.1 优势
  • 单进程部署、元数据自管理;扩展性提升至百万分区;Controller由配置静态指定,避免动态选举抖动。
3.11.2 部署要点
  1. 解压并重命名kafka-kraft
  2. 修改config/kraft/server.properties
    • process.roles=broker,controller
    • node.id=1/2/3(各节点唯一)
    • controller.quorum.voters=1@broker1:9093,2@broker2:9093,3@broker3:9093
  3. 生成集群ID:bin/kafka-storage.sh random-uuid,再format所有节点。
  4. 启停脚本kfk2.sh与ZK版类似,仅替换路径与配置文件。
http://www.dtcms.com/a/418301.html

相关文章:

  • TDengine 时序函数 IRATE 用户手册
  • 网站模板源码下载广告网站建设
  • 一键部署 Spring Boot 到远程 Docker 容器
  • Docker 入门:容器化开发的强大工具
  • iOS 26 全景揭秘,新界面、功能创新、兼容挑战与各种工具在新版系统中的定位
  • 北京交易中心网站电商网站建设需要
  • 【ansible/K8s】K8s的自动化部署源码分享
  • C++STL之list
  • CentOS 7安装部署RabbitMQ
  • 本地怎么远程调试服务器
  • AndroidID重置功能开发
  • 【Byte 类型】编程基石:揭开 `Byte`(字节)的神秘面纱
  • 天津做网站哪家服务好北京正邦品牌设计公司
  • 外贸搜素网站android studio开发app实例
  • 5. Prompt 提示词
  • android 自定义样式 Toast 实现(兼容 Android 4.1+~Android 16(API 16))
  • android SharedPreferences 工具类 * 兼容 Android 16+ (API 16)
  • 宁波易通建设网站网站备案信息代码
  • 阿里云OpenLake及行业解决方案年度发布,助力千行百业Data+AI一体化融合
  • 独立站收款方式有哪些
  • 2025 年 Python 数据分析全栈学习路线:从入门到精通的进阶指南
  • 行业类网站应如何建设网站怎么建设以及维护
  • Go 和云原生 的现状和发展前景
  • C# 中Byte类型转化问题
  • 紫外UV相机在机器视觉检测方向的应用
  • 一款国产开源免费的项目管理工具 - Kanass,超级轻量、简洁
  • 自己做的网站百度搜到新增接入 新增网站
  • (七——下)复习(分布式链路追踪/Rabiit MQ使用/Api Gateway)
  • 前端八股文 Vue上
  • OpenHarmony SELinux全面技术指南:从原理到实践的系统安全防护(全网最全)