Kafka原理

Kafka原理

本次我们从Kafka的存储原理,以及Kafka高性能、高可靠特性来讲解Kafka的原理。

Kafka的存储原理

Kafka中的消息根据Topic进行分类,每个Topic下有多个Partition,用于提高吞吐量和并行度。
在这里插入图片描述
在物理概念中,**每个Partition有一个log,log记录的就是生产者给予的消息,每次生产者给予的消息会追加到log文件末尾,并且附上该数据的offset。**消费者在消费的时候都会记录所消费的offset,如果消费者出错后重启,也可以根据offset回到当时的数据。
在这里插入图片描述
为了避免分区中的log过大导致定位时间过长,Kafka将log做成多个segment,每个segment分为索引为索引文件(.index)和日志文件(.log)。index和log文件以当前segment第一条消息的offset命名。在搜索的时候通过index得到log文件中对应offset的偏移位置。

Kafka的高性能

kafka的高性能表现在以下几个层面:

1.分区架构

由于对topic做了分区,理论上可以无限横向拓展,从而提高kafka性能,分区作为并行的单元,一个消费者组里的一个消费者消费一个分区的数据。

2.存储层面

对日志进行磁盘顺序读写,普通的机械磁盘,顺序访问速率也接近了内存的随机访问速率。

在这里插入图片描述
Producer传递到Broker的消息集中的每条消息都会分配一个顺序值(只是相对于本批次的序号)用来标记Producer所生产消息的顺序,每一批消息的顺序值都从0开始。服务端会将每条消息的顺序值转换成绝对偏移量(Broker从Partition维度来标记消息的顺序,用于控制Consumer消费消息的顺序)。Kafka通过nextOffset(下一个偏移量)来记录存储在日志中最近一条消息的偏移量。消息发送到Broker后,每条消息都被顺序写该Partition所对应的文件中,因此效率非常高,这是Kafka高吞吐率的一个很重要的保证。

3.批量写入

Producer生产消息会涉及大量的消息网络传输,如果Producer每生产一个消息就发送到Broker会造成大量的网络消耗,严重影响到Kafka的性能。为了解决这个问题,Kafka使用了批量发送的方式。
在这里插入图片描述
Kafka通过将Topic划分成多个Partition,如上图所示,消息经过路由策略,被分发到不同的Partition对应的本地队列(序列化消息并压缩消息后,追加到本地的记录收集器(RecordAccumulator),Sender不断轮询记录收集器,当满足一定条件时,将队列中的数据发送到Partition Leader节点。

4.检索策略

首先是将par

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值