kafka消息检索原理

1、消息结构体构成

在这里插入图片描述

2、消息检索的原理

读取数据的过程中,数据是属于某一个topic的某一个partition对应的某一个segment文件中的某一条记录。如何高效找到这条消息,决定着kafka的性能。
在这里插入图片描述
Kafka中数据文件的保存目录,我们可以看到的是这个partition下面有好多组文件,每一组都由一个segment数据文件,一个index索引文件,以及一个timeindex时间戳索引文件构成。
Segment就是保存数据的文件,index索引文件每一条消息相对偏移量,也就是一条msg在segment文件中的偏移量,而我们说的每一条消息的偏移量是指这一条消息在这一个分区中若干segment中的唯一的标识。
在这里插入图片描述
index文件的序号就是message在日志文件中的相对偏移量
OffsetIndex是稀疏索引,也就是说不会存储所有的消息的相对offset和position
消息检索的过程,以这个partition目录下面,00000000001560140916为例:
定位offset为1560140921的message

①定位到具体的segment日志文件
由于log日志文件的文件名是这个文件中第一条消息的offset-1。
因此可以根据offset定位到这个消息所在日志文件:00000000001560140916.log
②计算查找的offset在日志文件的相对偏移量
segment文件中第一条消息的offset = 1560140917
计算message相对偏移量:
需要定位的offset - segment文件中第一条消息的offset + 1 = 1560140921 - 1560140917 + 1 = 5
查找index索引文件, 可以定位到该消息在日志文件中的偏移字节为456。
综上,
直接读取文件夹00000000001560140916.log中偏移456字节的数据即可。
1560140922 -1560140917 +1 = 6 如果查找的offset在日志文件的相对偏移量在index索引文件不存在,
可根据其在index索引文件最接近的上限偏移量,往下顺序查找。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka是一个分布式的基于发布订阅模式的消息队列,主要用于大数据实时处理。在Kafka中,消息是以topic进行分类的,生产者生产消息,消费者消费消息都是面向topic的。[2] 在Kafka 0.11版本之后,引入了幂等性机制,配合acks=-1的at least once语义,实现了从producer到broker的exactly once语义。这意味着Kafka能够提供精确一次交付的功能,保证消息不会被重复处理。 此外,Kafka有效地支持精确一次交付。对于Kafka Streams中的数据传输和处理,事务性生产者/消费者是可用的。而对于其他目的地系统的精确一次交付,通常需要与Kafka进行合作。Kafka提供了偏移量,这使得实现精确一次交付成为可能。默认情况下,Kafka保证至少进行一次传递,并且允许用户通过禁用生产者的重试并在消费者中提交偏移来实现最多一次传递的语义。 综上所述,Kafka消息队列原理主要包括基于发布订阅模式的分类消息、幂等性机制、精确一次交付等特性。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *2* *3* [kafka基本原理](https://blog.csdn.net/khuangliang/article/details/107776046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *4* [消息队列之-Kafka原理讲解](https://blog.csdn.net/wanglei_storage/article/details/82692413)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值