什么大型网站用python做的,网站容易做吗,网站seo怎么填写,域名交易网站哪个好「Kafka」Broker篇 主要讲解的是在 Kafka 中是怎么存储数据的#xff0c;以及 Kafka 和 Zookeeper 之间如何进行数据沟通的。 Kafka Broker 总体工作流程
Zookeeper 存储的 Kafka 信息 启动 Zookeeper 客户端#xff1a; [atguiguhadoop102 zookeeper-3.5.7]$ bin/zkCli.sh通…「Kafka」Broker篇 主要讲解的是在 Kafka 中是怎么存储数据的以及 Kafka 和 Zookeeper 之间如何进行数据沟通的。 Kafka Broker 总体工作流程
Zookeeper 存储的 Kafka 信息 启动 Zookeeper 客户端 [atguiguhadoop102 zookeeper-3.5.7]$ bin/zkCli.sh通过 ls 命令可以查看 kafka 相关信息 [zk: localhost:2181(CONNECTED) 2] ls /kafkaKafka Broker 总体工作流程 模拟 Kafka 上下线Zookeeper 中数据变化 查看 /kafka/brokers/ids 路径上的节点 查看 /kafka/controller 路径上的数据 查看 /kafka/brokers/topics/first/partitions/0/state 路径上的数据 停止 hadoop104 上的 kafka 再次查看 /kafka/brokers/ids 路径上的节点 再次查看 /kafka/controller 路径上的数据 再次查看 /kafka/brokers/topics/first/partitions/0/state 路径上的数据 启动 hadoop104 上的 kafka 再次观察 1、2、3 步骤中的内容。
Broker 重要参数 生产经验—节点服役和退役
服役新节点
新节点准备 关闭 hadoop104并右键执行克隆操作 开启 hadoop105并修改 IP 地址 在 hadoop105 上修改主机名称为 hadoop105 重新启动 hadoop104、hadoop105 修改 haodoop105 中 kafka 的 broker.id 为 3保证唯一。 [atguiguhadoop105 config]$ vim server.properties删除 hadoop105 中 kafka 下的 datas 和 logs [atguiguhadoop105 kafka]$ rm -rf datas/* logs/*启动 hadoop102、hadoop103、hadoop104 上的 kafka 集群 [atguiguhadoop102 ~]$ zk.sh start
[atguiguhadoop102 ~]$ kf.sh start单独启动 hadoop105 中的 kafka [atguiguhadoop105 kafka]$ bin/kafka-server-start.sh -daemon ./config/server.properties我们先来看一下 first 主题的信息 目前 first 主题的信息仍然只存在 broker0、1、2上但 broker3 并没有帮助分担历史数据所以我们需要负载均衡的操作。
执行负载均衡操作 创建一个要均衡的主题 [atguiguhadoop102 kafka]$ vim topics-to-move.json{topics: [{topic: first}],version: 1
}生成一个负载均衡的计划 创建副本存储计划所有副本存储在 broker0、broker1、broker2、broker3 中 [atguiguhadoop102 kafka]$ vim increase-replication-factor.json输入以下内容刚生成的计划 {version:1,partitions:[{topic:first,partition:0,replicas:[2,3,0],log_dirs:[any,any,any]},{topic:first,partition:1,replicas:[3,0,1],log_dirs:[any,any,any]},{topic:first,partition:2,replicas:[0,1,2],log_dirs:[any,any,any]}]}执行副本存储计划 验证副本存储计划
退役旧节点
执行负载均衡操作 先按照退役一台节点生成执行计划然后按照服役时操作流程执行负载均衡。 把要退役节点的数据导入到其他节点上。 创建一个要均衡的主题 [atguiguhadoop102 kafka]$ vim topics-to-move.json{topics: [{topic: first}],version: 1
}创建执行计划 创建副本存储计划所有副本存储在 broker0、broker1、broker2 中 [atguiguhadoop102 kafka]$ vim increase-replication-factor.json{version:1,partitions:[{topic:first,partition:0,replicas:[2,0,1],log_dirs:[any,any,any]},{topic:first,partition:1,replicas:[0,1,2],log_dirs:[any,any,any]},{topic:first,partition:2,replicas:[1,2,0],log_dirs:[any,any,any]}]}执行副本存储计划 [atguiguhadoop102 kafka]$ bin/kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --reassignment-json-file increase-replication-factor.json --execute验证副本存储计划 [atguiguhadoop102 kafka]$ bin/kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --reassignment-json-file increase-replication-factor.json --verifyStatus of partition reassignment:
Reassignment of partition first-0 is complete.
Reassignment of partition first-1 is complete.
Reassignment of partition first-2 is complete.
Clearing broker-level throttles on brokers 0,1,2,3
Clearing topic-level throttles on topic first执行停止命令
在 hadoop105 上执行停止命令即可
[atguiguhadoop105 kafka]$ bin/kafka-server-stop.shKafka 副本
副本基本信息 Kafka 副本作用提高数据可靠性。 Kafka 默认副本 1 个生产环境一般配置为 2 个保证数据可靠性 太多副本会增加磁盘存储空间增加网络上数据传输降低效率。 Kafka 中副本分为Leader 和 Follower。 Kafka 生产者只会把数据发往 Leader然后 Follower 找 Leader 进行同步数据。 Kafka 分区中的所有副本统称为 ARAssigned Repllicas。 A R I S R O S R AR ISR OSR ARISROSR I S R ISR ISR表示和 Leader 保持同步的 Follower 集合。如果 Follower 长时间未向 Leader 发送通信请求或同步数据则该 Follower 将被踢出 ISR。该时间阈值由 replica.lag.time.max.ms 参数设定默认 30s。Leader 发生故障之后就会从 ISR 中选举新的 Leader。 O S R OSR OSR表示 Follower 与 Leader 副本同步时延迟过多的副本。
Leader 选举流程
Kafka 集群中有一个 broker 的 Controller 会被选举为 Controller Leader负责管理集群 broker 的上下线所有 topic 的分区副本分配和 Leader 选举等工作。
Controller 的信息同步工作是依赖于 Zookeeper 的。 Leader 选举会按照 AR 的顺序进行选取就是下图中的 Replicas 顺序 Leader 和 Follower 故障处理细节
Follower 故障处理细节 消费者可见的数据最大 offset 就是 4 H W − 1 HW - 1 HW−1。 该 Follower 先被踢出 ISR 队列然后其余的 Leader、Follower继续接受数据。如果该 Follower 恢复了会读取本地磁盘上次记录的 HW并裁剪掉 高于 HW 的数据从 HW 开始向 Leader 进行同步数据。 待该 Follower 的 LEO 大于等于该 Partition 的 HW即 Follower 追上了 Leader Leader 故障处理细节
broker0 一开始是 Leader然后挂掉了选举 broker1 为新的 Leader然后其余的 Follower 会把各自 log 文件高于 HW 的部分裁剪掉然后从新的 Leader 同步数据。 分区副本分配
如果 kafka 服务器只有 4 个节点那么设置 kafka 的分区数大于服务器台数在 kafka 底层如何分配存储副本呢
创建 16 分区3 个副本 创建一个新的 topic名称为 second 查看分区和副本情况
依次错开让每一个副本负载均衡均匀分配也可以保证数据的可靠性。 生产经验—手动调整分区副本存储
在生产环境中每台服务器的配置和性能不一致但是Kafka只会根据自己的代码规则创建对应的分区副本就会导致个别服务器存储压力较大。所有需要手动调整分区副本的存储。
需求创建一个新的topic4个分区两个副本名称为 three。将该 topic 的所有副本都存储到 broker0 和 broker1 两台服务器上。 手动调整分区副本存储的步骤如下 生产经验—Leader Partition 负载平衡 真正生产环境建议关闭或设置 percentage 为 20%、30%不要频繁的触发自平衡浪费集群大量性能。 生产经验—增加副本因子
在生产环境当中由于某个主题的重要等级需要提升我们考虑增加副本。副本数的增加需要先制定计划然后根据计划执行。 创建 topic [atguiguhadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --create --partitions 3 --replication-factor 1 --topic four手动增加副本存储 创建副本存储计划所有副本都指定存储在 broker0、broker1、broker2 中 [atguiguhadoop102 kafka]$ vim increase-replication-factor.json输入如下内容 {version:1,partitions:[{topic:four,partition:0,replicas:[0,1,2]},{topic:four,partition:1,replicas:[0,1,2]},{topic:four,partition:2,replicas:[0,1,2]}]}执行副本存储计划 [atguiguhadoop102 kafka]$ bin/kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --reassignment-json-file increase-replication-factor.json --execute文件存储
文件存储机制
Topic 数据的存储机制 kafka 中默认数据保存 7 天通过 .timeindex 文件判断日志保存多久过期会定时清理对应的数据详情参考下方的 - 文件清理策略。
思考Topic 数据到底存储在什么位置 index 文件和 log 文件详解 说明日志存储参数配置 文件清理策略
Kafka 中默认的日志保存时间为 7 天可以通过调整如下参数修改保存时间
log.retention.hours最低优先级小时默认 7 天。log.retention.minutes分钟。log.retention.ms最高优先级毫秒。log.retention.check.interval.ms负责设置检查周期默认 5 分钟。
那么日志一旦超过了设置的时间怎么处理呢
Kafka 中提供的日志清理策略有 delete 和 compact 两种。
1delete 日志删除将过期数据删除 log.cleanup.policy delete 所有数据启用删除策略默认 基于时间默认打开。以 segment 中所有记录中的最大时间戳作为该文件时间戳。 基于大小默认关闭。超过设置的所有日志总大小删除最早的 segment。 log.retention.bytes默认等于 -1表示无穷大其实就是关闭掉了。 思考如果一个 segment 中有一部分数据过期一部分没有过期怎么处理 以 segment 中所有记录中的最大时间戳作为该文件时间戳进行删除。 也就是只要这个 segment 中有数据还未过期就不进行删除操作。 2compact 日志压缩 高效读写数据
分布式集群
Kafka 本身是分布式集群可以采用分区技术并行度高。
稀疏索引
读数据采用稀疏索引可以快速定位要消费的数据。
顺序写磁盘
Kafka 的 producer 生产数据要写入到 log 文件中写的过程是一直追加到文件末端为顺序写。官网有数据表明同样的磁盘顺序写能到 600M/s而随机写只有 100K/s。这与磁盘的机械机构有关顺序写之所以快是因为其省去了大量磁头寻址的时间。 页缓存 零拷贝技术 笔记整理自b站尚硅谷视频教程【尚硅谷】Kafka3.x教程从入门到调优深入全面