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

Kafka06-进阶-尚硅谷 - 实践

Kafka06-进阶-尚硅谷 - 实践

3-Kafka进阶

文章目录

    • 3-Kafka进阶
    • @[toc]
      • 3.1 Controller选举
        • Controller?就是3.1.1 什么
        • 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?
3.1.2 如何选出Controller?
  • 所有Broker抢先在ZooKeeper创建/controller临时节点,成功者即为Controller;其余Broker监听该节点变化。
3.1.3 脑裂与epoch

3.2 Broker上下线感知

3.2.1 监听机制

3.3 材料偏移量定位

3.3.1 分区物理结构
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)
3.5.2 日志压缩(compact)
  • log.cleanup.policy=compact:相同key仅保留最新记录,用于状态类Topic

3.6 页缓存(PageCache)


3.7 零拷贝

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

3.8 顺序写日志


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监控


3.11 KRaft模式(无ZooKeeper)

3.11.1 优势
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版类似,仅替换路径与配置文件。