Kafka 物理存储机制

优质博文:IT-BLOG-CN

一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从Kafka文件存储机制和物理结构角度,分析Kafka是如何实现高效文件存储,及实际应用效果。Kafka的基本存储单位是分区。在配置Kafka的时候,管理员指定了一个用于存储分区的目录清单log.dirs参数的值。

一、分区分配

创建主题时,Kafka首先决定如何在broker之间分配分区。假设有6broker,打算创建一个包含10个分区的主题。并且复制系数是3,相当于30个分区副本。在被分配到6broker上时,要达到如下的目标:
【1】在broker间平均分配分区副本。对于上述例子来说,就是要保证每个broker可以分到5个副本。
【2】确保每个分区的每个副本分布在不同的broker上。
【3】如果为broker指定了机架信息,那么尽可能把每个分区的副本分配到不同机架的broker上。这样做是为了保证一个机架不可用不会导致整个分区不可用。

为了实现这个目标,我们先随机选择一个broker(假设是2),然后通过轮询给每个broker分配分区来确定首领的位置。如果分区0的首领在broker2上,那么分区1的首领就在broker3上,以此类推。然后,从分区首领开始,以此分配跟随者副本。如分区0首领在broker2上,那么它的第一个副本会出现在broker3上,第二个出现在 broker4上。如果配置了机架信息,那么就不是按照数字顺序来选择broker了,而是按照交替机架的方式来选择broker。假设broker0broker1broker2放在同一个机架,broker3broker4broker5放在其他不同的机架。此时就不是按照05的顺序来选择broker,而是按照0,3,1,4,2,5的顺序进行选择的。

二、文件管理

保留数据时Kafka的一个基本特性,Kafka不会一直保留数据,也不会等到所有消费者都读取了消息之后才删除消息。相反,Kafka管理员为每个主题配置了数据保留期限,规定数据被删除之前可以保留多长时间,或者清理数据之前可以保留的数据量大小。 因为在一个大文件里查找和删除消息是很费时的,也很容易出错,所以我们把分区分成若干个片段。默认情况下,index大小为10M,每个片段log包含1GB或一周数据,以较小的那个为准。当前正在写入数据的片段叫做活跃片段,活跃片段永远不会被删除。

三、文件格式

我们把Kafka的消息和偏移量保存在文件里。保存在磁盘上的数据格式与从生产者发送过来或者发送给消费者的消息格式是一样的。因为使用相同的消息格式进行磁盘存储和网络传输,Kafka可以使用零复制技术给消费者发送消息,同时避免了对生产者已经压缩过的消息进行解压缩。除了键、值和偏移量外,消息里还包含了消息大小、校验和、消息格式版本号、压缩算法和时间戳。时间戳可以是生产者发送消息的时间,也可以是消息到达broker的时间,这个是可配置的。如果生产者发送的是压缩过的消息,那么同一个批次的消息会被再压缩一次,被当做包装消息进行发送。下面是普通消息和包装消息图:

四、文件存储机制

【1】Broker 消息中间件处理结点,一个Kafka节点就是一个Broker,多个Broker可以组成一个Kafka集群。
【2】Topic

评论 87
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿进阶

千言万语都不及一句“谢谢”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值