Kafka-Broker

作者: 我可能是个假开发 | 来源:发表于2023-01-24 15:44 被阅读0次

一、Kafka信息

1.查看zk存储的信息

  • 启动 Zookeeper 客户端:bin/zkCli.sh
  • 通过 ls 命令可以查看 kafka 相关信息:ls /kafka

2.zk存储的kafka信息

在zookeeper的服务端存储的Kafka相关信息:

  • /kafka/brokers/ids: [0,1,2] 记录有哪些服务器
  • /kafka/brokers/topics/first/partitions/0/state:{"leader":1 ,"isr":[1,0,2] } 记录每个主题下的分区谁是Leader,有哪些服务器可用
  • /kafka/controller:{"brokerid" :0} 辅助选举Leader
Kafka信息.png

二、Broker工作流程

Kafka工作流程.png

1.Broker工作流程

  • 1.Broker启动后在ZK中注册
  • 2.每个broker中的controller,谁现在zk中注册成功,谁就成为决定leader选举的controller
  • 3.成功在zk中注册的controller监听brokers节点的变化
  • 4.controller选举leader
  • 5.controller将节点的信息上传到zk
  • 6.其他controller从zk同步相关信息(如果某一个controller宕机,随时成为leader)
  • 7.生产者发送信息
  • 8.其他follower主动同步相关信息(底层采用log方式存储)
  • 9.broker应答消息
  • 10.如果broker1的leader宕机,controller监听到了节点的变化,从zk中重新获取获取isr,重新选举出新的leader
  • 11.更新zk中的Leader及isr

2.Controller选举Leader规则:

以ISR存活为前提,按照AR中排在前面的优先。
例如 ar[1,0,2]; isr[0,1,2]; 那么leader就会按照1,0,2的顺序轮询。

ISR: leader和follower中通讯正常的节点;AR:Kafka分区中所有副本的统称

3.Kafka 上下线, Zookeeper 中数据变化

(1)查看/kafka/brokers/ids 路径上的节

[zk: localhost:2181(CONNECTED) 2] ls /kafka/brokers/ids
[0, 1, 2]

(2)查看/kafka/controller 路径上的数据

[zk: localhost:2181(CONNECTED) 15] get /kafka/controller
{"version":1,"brokerid":0,"timestamp":"1674630187681"}

(3)查看/kafka/brokers/topics/first/partitions/0/state 路径上的数据

[zk: localhost:2181(CONNECTED) 16] get /kafka/brokers/topics/first/partitions/0/state
{"controller_epoch":24,"leader":0,"version":1,"leader_epoch":18,"isr":[0,1,2]}

(4)停止104 上的 kafka

[104 kafka]$ bin/kafka-server-stop.sh

(5)再次查看/kafka/brokers/ids 路径上的节点

[zk: localhost:2181(CONNECTED) 3] ls /kafka/brokers/ids
[0, 1]

(6)再次查看/kafka/controller 路径上的数据

[zk: localhost:2181(CONNECTED) 15] get /kafka/controller
{"version":1,"brokerid":0,"timestamp":"1674630394924"}

(7)再次查看/kafka/brokers/topics/first/partitions/0/state 路径上的数据

[zk: localhost:2181(CONNECTED) 16] get /kafka/brokers/topics/first/partitions/0/state
{"controller_epoch":24,"leader":0,"version":1,"leader_epoch":18,"isr":[0,1]}

(8)启动104 上的 kafka

[104 kafka]$ bin/kafka-server-start.sh -daemon ./config/server.properties

(9)再次查看/kafka/brokers/ids 路径上的节点

[zk: localhost:2181(CONNECTED) 3] ls /kafka/brokers/ids
[0, 1, 2]

三、Broker重要参数

参数名称 描述
replica.lag.time.max.ms ISR 中, 如果 Follower 长时间未向 Leader 发送通信请求或同步数据,则该 Follower 将被踢出 ISR。该时间阈值, 默认 30s
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.bytes Kafka 中 log 日志是分成一块块存储的,此配置是指 log 日志划分成块的大小, 默认值 1G
log.index.interval.bytes 默认 4kb, kafka 里面每当写入了 4kb 大小的日志(.log),然后就往 index 文件里面记录一个索引
log.retention.hours Kafka中数据保存的时间,默认 7 天
log.retention.minutes Kafka中数据保存的时间,分钟级别,默认关闭
log.retention.ms Kafka 中数据保存的时间,毫秒级别,默认关闭
log.retention.check.interval.ms 检查数据是否保存超时的间隔, 默认是5分钟
log.retention.bytes 超过设置的所有日志总大小,删除最早的 segment。默认等于-1,表示无穷大
log.cleanup.policy 表示所有数据启用删除策略;如果设置值为 compact,表示所有数据启用压缩策略。默认是 delete
num.io.threads 负责写磁盘的线程数。整个参数值要占总核数的 50%。默认是 8。
num.replica.fetchers 副本拉取线程数,这个参数占总核数的 50%的 1/3
num.network.threads 数据传输线程数,这个参数占总核数的50%的 2/3。默认是 3。
log.flush.interval.messages 强制页缓存刷写到磁盘的条数,默认是 long 的最大值, 9223372036854775807。一般不建议修改,交给系统自己管理
log.flush.interval.ms 每隔多久,刷数据到磁盘,默认是 null。一般不建议修改,交给系统自己管理

极客时间《Kafka 核心技术与实战》学习笔记Day10 - http://gk.link/a/11UOV

相关文章

网友评论

    本文标题:Kafka-Broker

    本文链接:https://www.haomeiwen.com/subject/xmsacdtx.html