1.工作流程

1.1zookeeper存储了什么信息

kafka 写broker挂掉 kafka broker下线_数据

kafka 写broker挂掉 kafka broker下线_kafka 写broker挂掉_02

 1.2 Kafka Broker 总体工作流程

 2 生产经验——节点服役和退役

2.1 服役新节点

1)新节点准备
(1)关闭 node2,并右键执行克隆操作。
(2)开启 node3,并修改 IP 地址。

2)执行负载均衡操作

(1)创建一个要均衡的主题。

(2)生成一个负载均衡的计划。

(3)创建副本存储计划(所有副本存储在 broker0、broker1、broker2、broker3 中)

(4)执行副本存储计划。

(5)验证副本存储计划。

2.2 退役旧节点

1)执行负载均衡操作
先按照退役一台节点,生成执行计划,然后按照服役时操作流程执行负载均衡。
(1)创建一个要均衡的主题。

(2)创建执行计划。

(3)创建副本存储计划(所有副本存储在 broker0、broker1、broker2 中)。

(4)执行副本存储计划。

(5)验证副本存储计划。

3 Kafka 副本

3.1 副本基本信息

(1)Kafka 副本作用:提高数据可靠性。
(2)Kafka 默认副本 1 个,生产环境一般配置为 2 个,保证数据可靠性;太多副本会
增加磁盘存储空间,增加网络上数据传输,降低效率。
(3)Kafka 中副本分为:Leader 和 Follower。Kafka 生产者只会把数据发往 Leader,
然后 Follower 找 Leader 进行同步数据。
(4)Kafka 分区中的所有副本统称为 AR(Assigned Repllicas)。
AR = ISR + OSR
ISR,表示和 Leader 保持同步的 Follower 集合。如果 Follower 长时间未向 Leader 发送通信请求或同步数据,则该 Follower 将被踢出 ISR。该时间阈值由 replica.lag.time.max.ms参数设定,默认 30s。Leader 发生故障之后,就会从 ISR 中选举新的 Leader。
OSR,表示 Follower 与 Leader 副本同步时,延迟过多的副本。

3.2 Leader 选举流程

kafka 写broker挂掉 kafka broker下线_分布式_03

 3.3 Leader 和 Follower 故障处理细节

kafka 写broker挂掉 kafka broker下线_数据_04

kafka 写broker挂掉 kafka broker下线_负载均衡_05

 

3.4 分区副本分配

如果 kafka 服务器只有 4 个节点,那么设置 kafka 的分区数大于服务器台数,在 kafka
底层如何分配存储副本呢?
创建 16 分区,3 个副本
(1)创建一个新的 topic,名称为 second。 

(2)查看分区和副本情况。

3.5 生产经验——手动调整分区副本存储

kafka 写broker挂掉 kafka broker下线_分布式_06

 创建副本存储计划(所有副本都指定存储在 broker0、broker1 中)。

kafka 写broker挂掉 kafka broker下线_数据_07

 3.6 生产经验——Leader Partition 负载平衡

kafka 写broker挂掉 kafka broker下线_数据_08

 3.7 生产经验——增加副本因子

kafka 写broker挂掉 kafka broker下线_负载均衡_09

4.文件存储

4.1 文件存储机制

1)Topic 数据的存储机制

kafka 写broker挂掉 kafka broker下线_负载均衡_10

2)index 文件和 log 文件详解 

kafka 写broker挂掉 kafka broker下线_负载均衡_11

kafka 写broker挂掉 kafka broker下线_kafka 写broker挂掉_12

 4.2 文件清理策略

Kafka 中默认的日志保存时间为 7 天,可以通过调整如下参数修改保存时间。
⚫ log.retention.hours,最低优先级小时,默认 7 天。
⚫ log.retention.minutes,分钟。
⚫ log.retention.ms,最高优先级毫秒。
⚫ log.retention.check.interval.ms,负责设置检查周期,默认 5 分钟。
那么日志一旦超过了设置的时间,怎么处理呢?
Kafka 中提供的日志清理策略有 delete 和 compact 两种。
1)delete 日志删除:将过期数据删除
⚫ log.cleanup.policy = delete 所有数据启用删除策略
(1)基于时间:默认打开。以 segment 中所有记录中的最大时间戳作为该文件时间戳。
(2)基于大小:默认关闭。超过设置的所有日志总大小,删除最早的 segment。
log.retention.bytes,默认等于-1,表示无穷大。
思考:如果一个 segment 中有一部分数据过期,一部分没有过期,怎么处理?

kafka 写broker挂掉 kafka broker下线_分布式_13

2)compact 日志压缩 

 

kafka 写broker挂掉 kafka broker下线_负载均衡_14

 5 高效读写数据

1)Kafka 本身是分布式集群,可以采用分区技术,并行度高
2)读数据采用稀疏索引,可以快速定位要消费的数据
3)顺序写磁盘
Kafka 的 producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端,
为顺序写。官网有数据表明,同样的磁盘,顺序写能到 600M/s,而随机写只有 100K/s。这
与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。

4)页缓存 + 零拷贝技术

kafka 写broker挂掉 kafka broker下线_kafka 写broker挂掉_15