Kafka介绍

Kafka 是一款性能强大且相当常用的分布式消息队列,常常用于对流量进行消峰、解耦系统和异步处理部分逻辑以提高性能的场景。
在kafka中,所有的消息都以日志的形式存储。这种日志只允许追加新数据,不允许修改之前文件内容

日志文件的存储方式:每个topic有多个partition,每个patition有多个有序日志段

已知offset,如何查找日志

即如何为日志文件建立一个索引,这里很关键的一个问题在于offset是自然线性增长的,是有序的

我们来看一个topic中一个patition的日志文件格式:


00000000000000000000.log //消息体本身日志
00000000000000000000.index //索引
00000000000000000000.timeindex //时间索引
00000000000000000035.log
00000000000000000035.index
00000000000000000035.timeindex

我理解前面属于相较于物理第一个文件的绝对偏移量,而后面的部分属于相对偏移量。

index文件内容是两种偏移的对应关系,即 相对位置——绝对位置

如图我们可以看见offset的存储并不是连续的,所以我们查找只能查找到一个大概的范围

其实这是一种时空效率的权衡,用稀疏不连续的索引,使用了更少的空间

内存放不下索引文件怎么办

Kafka 的做法是基于 mmap 技术,将硬盘上的文件和内存进行映射;当然由于硬盘的空间可能比内存大很多,所以并不能够直接将内存在物理层面上与磁盘进行一一映射,这里我们需要引入虚拟内存的手段。

几种常见索引对比

MySQL innodb: B+ Tree
Oracle/Mongodb:B Tree
Kafka:稀疏索引

B+ 树就是为了磁盘存储而生,可以减少磁盘的访问次数,同时也可提供顺序访问

Kafka 采用顺序稀疏索引文件,同一分区的 log 都是顺序写的,采用稀疏索引,一方面节省空间,只要找个开始的位置,顺序遍历即可,这也和场景有关,消息是按分区顺序写入,消费端是按分区顺序成批拉取,二分找到起始位置,顺序读取即可,读写磁盘都是分区内顺序读写

为什么mysql一定要用树索引?
决定因素在于树是支持删改的,线性索引删改成本很高。至于稀疏索引的顺序批量查询,B+树叶子节点之间也有连接,也可支持

为什么kafka用稀疏索引?
这是由于他存储的内容是日志,只负责追加,不需要做删改

5.算法进阶——kafka消息查询(二分法)——稀疏索引与B+树索引的对比相关推荐

  1. 轻松理解 MySQL InnoDB 索引、B+树索引、查询原理

    博主:爱码叔 个人博客站点: icodebook 公众号:爱码叔漫画软件设计(搜:爱码叔) 专注于软件设计与架构.技术管理.擅长用通俗易懂的语言讲解技术.对技术管理工作有自己的一定见解.文章会第一时间 ...

  2. 10、Kafka 消息订阅系统

    1.Kafka 简介 Kafka 是一个高吞吐.分布式.基于发布订阅的消息系统,利用 Kafka 技术可在廉价 PCServer 上搭建起大规模消息系统. Kafka 和其他组件比较,具有消息持久化. ...

  3. kafka 安装使用 /springboot整合kafka /消息投递机制以及存储策略 /副本处理机制

    一.背景 1.基本信息 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流 ...

  4. 【5】数据结构与算法--- 算法 进阶

    第 4 章 算法 进阶 4.1 排序 4.1.1 排序算法简介 排序:把无序的队列变成有序的队列 排序算法:排序算法是一种将一串无规律数据依照特定顺序进行排列的一种方法或思路. 排序算法的稳定性:队列 ...

  5. 19 kafka消息队列

    文章目录 19 kafka消息队列 一.kafka介绍 1.消息队列基本介绍 2.常用的消息队列介绍 3.消息队列的应用场景 4.消息队列的两种模式 5.kafka的基本介绍 6.kafka的架构介绍 ...

  6. kafka消息的分发与消费(一)

    关于 Topic 和 Partition: Topic: 在 kafka 中,topic 是一个存储消息的逻辑概念,可以认为是一个消息集合.每条消息发送到 kafka 集群的消息都有一个类别.物理上来 ...

  7. for循环延时_RocketMQ进阶-延时消息

    前言 在开发中经常会遇到延时任务的需求,例如在12306购买车票,若生成订单30分钟未支付则自动取消:还有在线商城完成订单后48小时不评价 ,自动5星好评.像这类在某事件触发后一段时间内执行的需求任务 ...

  8. kafka 消息服务

    apache kafka参考 http://kafka.apache.org/documentation.html 消息队列方式: 点对点: 消息生产者生产消息发送到queue中,然后消息消费者从qu ...

  9. 写给前端的算法进阶指南,我是如何两个月零基础刷200题 等推荐

    大家好,我是若川. 话不多说,这一次花了几小时精心为大家挑选了20余篇好文,供大家阅读学习.本文阅读技巧,先粗看标题,感兴趣可以都关注一波,一起共同进步. 前端从进阶到入院 作者ssh就职于字节跳动基 ...

最新文章

  1. 不止最佳长论文,腾讯AI在ACL上还有这些NLP成果(附论文链接)
  2. logstash入门
  3. n9009 Android5.0内核,三星N9009(Galaxy Note 3 电信版 Android 5.0)刷Recovery教程
  4. 13行代码AC_2017年省赛C组蓝桥杯第一题 贪吃蛇长度(考查文件读取)
  5. SAP Spartacus的用户登录页面设计
  6. 通过生日查询各年龄段数量通过饼状图显示
  7. python3 x和python2 x区别_Python3.x和Python2.x的区别(转存参考)
  8. 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡
  9. Verify_Execute 验证SQL语句执行结果
  10. 网络商城html前端,商城 前端 html 页面 模板
  11. 表面粗糙度的基本评定参数是_表面粗糙度100个常见问题
  12. 【区块链】区块链学习要点记录
  13. python语言数值操作符_Python之组合数据类型、逻辑操作符、控制流语句、算术操作符...
  14. 单片机74LS138扩展中断
  15. 哲学必读10本经典著作
  16. 鸟哥的Linux私房菜之Linux 的文件权限与目录管理(一)
  17. 死磕 Fragment 的生命周期
  18. Inductive Matrix Completion Based on Graph Neural Networks
  19. 如何为豆瓣FM写一个chrome的歌词插件
  20. Seagull PHP框架学习教程之二

热门文章

  1. 2018秋招历程之海康威视篇
  2. 重庆阿尔克解读从1G到5G--手机网络技术发展史
  3. 11:类和对象、类的属性、类的方法
  4. 机器人工程创新类课程补充说明-2023-
  5. kaldi 发音字典生成
  6. 通过freemaker导出word文档SpringBoot+idea,做成浏览器下载
  7. php中empty功能,PHPempty()函数的说明
  8. xpt2046 ADC转换
  9. 如何恢复存储卡中毒后被隐藏的文件
  10. Fiddler_IE浏览器打开网页提示安全证书过期或证书错误的解决方法