• Kafka - 3.x 图解Broker总体工作流程



    在这里插入图片描述


    Zk中存储的kafka的信息

    在这里插入图片描述
    当前直接存储在根目录

    在这里插入图片描述


    在这里插入图片描述

    #配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便管理)
    zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka
    
    • 1
    • 2

    在这里插入图片描述


    Kafka Broker总体工作流程

    1. broker启动后向zk中注册

    在这里插入图片描述

    在这里插入图片描述


    2. Controller谁先启动注册,谁说了算

    在这里插入图片描述


    3. 由选举出来的Controller监听brokers节点的变化

    在这里插入图片描述

    4. Controller决定leader选举

    在这里插入图片描述

    5. Controller将节点信息上传到Zk中

    在这里插入图片描述


    6. 其他Controller从zk中同步相关信息

    在这里插入图片描述

    消息的发送和存储

    在这里插入图片描述

    7. 假设Broker1中的Leader挂了

    在这里插入图片描述


    8 Controller监听到节点变化

    在这里插入图片描述

    9 获取 ISR

    在这里插入图片描述

    10 选举新的Leader

    在这里插入图片描述

    11 . 更新Leader 和 ISR

    在这里插入图片描述


    实例模拟

    1)案例内容:模拟kafka上下线,查看zookeeper中数据变化
    2)查看kafka节点相关信息:① 查看zookeeper上的kafka集群节点信息
    [zk: localhost:2181(CONNECTED) 2] ls /kafka/brokers/ids
    [102, 103, 104]
    ② 查看当前kafka集群节点中的controller信息
    [zk: localhost:2181(CONNECTED) 2] get /kafka/controller
    {"version":1,"brokerid":103,"timestamp":"1637292471777"}
    ③ 查看kafka中的first主题的0号分区的状态
    [zk: localhost:2181(CONNECTED) 2] get /kafka/brokers/topics/first/partitions/0/state
    {"controller_epoch":24,"leader":102,"version":1,"leader_epoch":18,"isr":[102,103,104]}
    3)模拟kafka下线:停止hadoop103上的kafka
    [xxx@hadoop103 kafka]$ bin/kafka-server-stop.sh
    4)查看kafka相关节点信息
    ① 查看zookeeper上的kafka集群节点信息
    [zk: localhost:2181(CONNECTED) 2] ls /kafka/brokers/ids
    [102, 104]
    ② 查看当前kafka集群节点中的controller信息
    [zk: localhost:2181(CONNECTED) 2] ls /kafka/controller
    {"version":1,"brokerid":102,"timestamp":"1637292471777"}
    ③ 查看kafka中的first主题的0号分区的状态
    [zk: localhost:2181(CONNECTED) 2] get /kafka/brokers/topics/partitions/0/state
    {"controller_epoch":24,"leader":102,"version":1,"leader_epoch":18,"isr":[102,104]}
    5)重新启动hadoop103上的kafka服务
    [xxx@hadoop103 kafka]$ bin/kafka-server-stop.sh
    6)再次查看上述节点,观察区别变化
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    Broker重要参数

    参数名称描述
    replica.lag.time.max.msISR中的Follower超过该事件阈值(默认30s)未向Leader发送同步数据,则该Follower将被踢出ISR。
    auto.leader.rebalance.enable默认是true。自动Leader Partition 平衡。
    leader.imbalance.per.broker.percentage默认是10%。每个broker允许的不平衡的leader的比率。如果每个broker超过了这个值,控制器会触发leader的平衡。
    leader.imbalance.check.interval.seconds默认值300秒。检查leader负载是否平衡的间隔时间。
    log.segment.bytesKafka中log日志是分成一块块存储的,此配置是指log日志划分成块的大小,默认值1G。
    log.index.interval.bytes默认4kb,kafka里面每当写入了4kb大小的日志(.log),然后就往index文件里面记录一个索引。
    log.retention.hoursKafka中数据保存的时间,默认7天。
    log.retention.minutesKafka中数据保存的时间,分钟级别,默认关闭。
    log.retention.msKafka中数据保存的时间,毫秒级别,默认关闭。(优先级最高)
    log.retention.check.interval.ms检查数据是否保存超时的间隔,默认是5分钟。
    log.retention.bytes默认等于-1,表示无穷大。超过设置的所有日志总大小,删除最早的segment。
    log.cleanup.policy默认是delete,表示所有数据启用删除策略;如果设置值为compact,表示所有数据启用压缩策略。
    num.io.threads默认是8。负责写磁盘的线程数。整个参数值要占总核数的50%。
    num.replica.fetchers副本拉取线程数,这个参数占总核数的50%的1/3。
    num.network.threads默认是3。数据传输线程数,这个参数占总核数的50%的2/3。
    log.flush.interval.messages强制页缓存刷写到磁盘的条数,默认是Max(long) (9223372036854775807)。一般交给系统管理。
    log.flush.interval.ms每隔多久,刷数据到磁盘,默认是null。一般不建议修改,交给系统自己管理。

    在这里插入图片描述

  • 相关阅读:
    Linux应用之OTA升级
    网络安全-黑客攻击
    【kali-权限提升】(4.1)假冒令牌攻击、本地提权:流程
    SpringCloudGateway网关中各个过滤器的作用与介绍
    在达梦数据库上使用密码设备上的国密算法详细操作指南
    轻量级简约仪表板Dasherr
    计算机网络:电路、报文与分组交换
    ubuntu 添加、删除用户,修改用户名称,修改主机名
    .Net 6.0定义全局当前身份缓存对象
    跨域的几种解决方案
  • 原文地址:https://blog.csdn.net/yangshangwei/article/details/134076663