11.Kafka 消息存储基本介绍【顺序存储 & 零拷贝】

通过之前文章的介绍:

        7.解析 Kafka 中的 Topic 和 Partition  

        8.Kafka 分区分配策略  

        9.Kafka ---- 重新负载Rebalance过程  

        我们已经了解了 ①Kafka 中 Topic 和 Partition 的概念    ②Kafka 分区在集群中是如何分配的    ③Kafka 消息的分发策略    ④Kafka 的 Rebalance 操作  ⑤Kafka 消费端如何确定它该消费哪个分区数据  等。。

接下来,让我们来了解一下 Kafka 的消息内部存储

1.Kafka 消息存储在哪里?

       当 Kafka 发送端将消息发送至 Broker 上以后,会将消息持久化到磁盘上,以此来完成 Kafka 消息的持久化保存。Kafka 是使用日志的形式来保存生产者和消费者的消息,每条消息都包含一个 offset 值来保存它在当前分区的偏移量。

       因为 Kafka 中存储的一般都是大数据,海量的消息内容。为了避免 log 日志文件的过大,log 文件并不是直接对应到一个磁盘上的日志文件,而是对应到磁盘上的一个目录。该目录的命名规则为 <topic_name-partition>_<id>,比如创建一个名为 test的 Topic,其中有 3 个partitions,那么在 Kafka 的数据目录(/tmp/kafka-log)中就有3个目 录,分别是 test-0~2(该数据目录可以在 conf/server.properties 配置文件中自定义)。如下图所示

2.Kafka 内部是如何存储消息的?

      2.1  Kafka 采用顺序写入方式存储数据

        由于消息在发送至 Broker 时,都会持久化到磁盘上。当消息被消费时,则会从磁盘上读取消息去消费。我们现在大部分企业仍然用的是机械结构的磁盘,我们如果把消息以随机的方式写入磁盘,那么磁盘首先要做的就是寻址,也就是定位到数据所在磁盘的物理地址,在磁盘上就要找到对应的柱面、磁头以及对应的扇区,这个过程相对内存来说会消耗大量的时间。为了规避随机读写带来的时间消耗问题,Kafka 采用顺序写入的方式存储数据

       2.2  I/O操作造成的磁盘性能瓶颈,引出“零拷贝”技术

        虽然 Kafka 采用顺序写入的方式存储数据,但是频繁的 I/O 操作仍然会造成磁盘的性能瓶颈问题。针对 I/O 性能问题,Kafka 还有一个更厉害的性能优化策略,这就是"零拷贝"技术的由来。


Kafka 消息存储原理,到此处就介绍完毕。如果本文对你有所帮助,那就给我点个赞呗 ^_^

如需了解 Kafka "零拷贝"技术,请点击链接跳转:【传送门】Kafka  的零拷贝技术

End

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值