简单来说 ,ISR 副本 就是 Kafka 认为与 领导者副本 同步的副本。
ISR(In Sync Replicas )副本就是Kafka认为与领导者副本的数据同步的副本,根据该定义可看出,领导者副本天然就是ISR副本,毕竟它自己与自己肯定是同步的。甚至在某些情况下,ISR副本集中只有领导者一个副本。
判断一个副本是否符合ISR标准,取决于server.properties文件中replica.lag.time.max.ms配置参数,
该参数的默认值为30000(即30s),Kafka建议将该参数配置在10~30s之间
▲只要一个追随者副本滞后领导者副本的时间不连续超过replica.lag.time.max.ms 参数值,那Kafka就认为该追随者副本满足ISR标准。
就是追随者副本要在30s之内与领导者副本有进行数据同步的操作,这个副本才能被称为 ISR 同步副本。
追随者分区,基本上我们的程序是没办法直接去操作它的,因为追随者分区只是领导者分区的一个后备,因此,追随者分区会自动的和领导者分区保持数据的一致,进行数据同步。
在 server.properties 文件里面添加这个配置。
追随者副本要在20s之内与领导者副本进行同步数据的操作
默认:非同步副本不应该被选作领导者副本。
Kafka将所有不符合ISR的副本称为非同步副本。
通常而言,非同步副本落后领导者副本太多,当领导者副本挂掉时,非同步副本不适合被选举成领导者副本,否则会造成数据丢失,这也是Kafka的默认设置。
▲ 剥夺了非同步副本被选为领导者副本的资格,势必会造成可用性降低的问题。
比如将复制因子设为4,这意味着一个分区有1个领导者副本和3个追随者副本,
当领导者副本挂掉时,有可能这3个追随者副本都不符合ISR标准,那就没法选出新的领导者副本了,那这个分区就不可用了。
▲ 启用“非同步副本被选为领导者副本”
将 unclean.leader.election.enable 参数 设为 true 即可开启 “Unclean领导者选举”——允许非同步副本被选为领导者副本。
【注意】:开启“Unclean领导者选举”可以提高Kafka的可用性,但可能会造成数据丢失。
要开启的话,可以在配置文件中配置开启:
开启这个,在 Kafka 没有 ISR 同步副本可选的情况下,才会在非同步副本里面选择一个作为领导者副本。
当发送消息的主题不存在且希望Kafka能自动创建主题时,可在config/server.properties文件中增加如下配置:
设置是否允许自动创建主题(原默认值为true)
allow.auto.create.topics=true
设置自动创建主题时默认的复制因子为3(原默认值为1)
default.replication.factor=3
设置自动创建主题时默认默认分区数(原默认值为1)
num.partitions=2
把设置也添加进去:
如果要修改主题的分区数、复制因子、以及额外配置参数等,可使用kafka-topics.bat命令的–alter选项,例如如下命令:
kafka-topics.bat --alter ^
–bootstrap-server localhost:9092 ^
–partitions 5 ^
–topic test1
上面命令将test1主题的分区数改为5,
修改分区数量:
记得要指定修改哪个broker节点,这里是修改端口号为 9092的kafka节点。
如果要删除主题,则使用kafka-topics.bat的–delete选项,例如如下命令可删除test1主题。
kafka-topics.bat --delete ^
–bootstrap-server localhost:9092 ^
–topic test1
删除该主题后,该主题所包含的全部分区被删除、该主题下的所有消息也被删除了。
CMAK 界面删除主题:
命令删除主题:
按理说这个test1应该是被删除掉的,现在还存在,先不理。