一、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








网友评论