kafka 文件存储 消息同步机制

1. kafka broker存储原理

1.1 文件存储位置

  • 配置文件: config/server.properties

logs.dor
默认:/tmp/kafka-logs

1.1.1 Partition分区

为了实现横向扩展,把不同的数存放在不同的Broker上,同时降低单台服务器的访问压力,我们把一个topic中的数据分割中多个partition。
一个partition中的消息是有序的,但是全局不一定。
在这里插入图片描述

1.1.2 Replica副本

为了提高分区的可靠性,kafka设计了副本机制。
创建副本命令:

./kafka-topics.sh --create --bootstrap-server 172.0.0.1:9092 --replication-factor 4 --partitions 1 --topic overrep

部分数量需要小于等于Broker的数量,否则就会报错。由于这个机制,所以不论哪个broker宕机都可以完成切换。

这些所有的副本分为两种角色,Leader、Follower。leader负责对外的读写,follower唯一任务就是从leader异步拉取数据。由于所有的读写都发生leader上,所以就没有数据一致性问题。

./kafka-topics.sh --create --bootstrap-server 192.168.8.146:9092 --replication-factor 3 --partitions 3 --topic a3part3rep
查看副本分布情况:
./kafka-topics.sh --topic a3part3rep --describe --bootstrap-server 127.0.0.1:9092
在这里插入图片描述

1.1.4 副本在Broker的分布

分布策略由AdminUtils.scala的assignReplicasToBrokers函数决定,规则如下:

  1. first of all,副本因子不能大于Broker的个数;
  2. 第一个分区(编号为0的分区)的第一个副本放置位置是随机从brokerList选择的(Broker的副本);
  3. 其他分区的第一个副本防止位置相对于对于第0个分区一次往后移;

如果有5个broker,5个分区,假设第一个分区的第一个副本放在第三个broker,那么第二个分区的第一个副本放在第四个broker,第三个分区的第一个副本放在第五个broker,依次类推。
这样的好处是,所有分区leader都可以平均分布在不同的broker,避免多个分区的leader分布在同一个broker上,降低了单个分区的读写压力。

  1. 每个分区剩余的副本相对与第一个副本防止位置其实由nextReplicaShift决定的,而这个数字是随机的。
  2. <
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值