目录

1、关于Kafka你知道这些术语么?

2、Kafka如何存储数据?

3、kafka扑街了,如何保证高可用?

4、Kafka如何做到数据不丢失?

又是烟雨蒙蒙的冬日,一杯暖茶,春天的气息已经在杯中袅袅升起的热气里荡漾开来,茶醇使人醉,技术要学会。我们来简单剖析一下kafka的一些原理特性。

1、关于Kafka,你知道这些术语吗?

Kafka在消息处理领域能独步天下,自然离不开他优良的架构设计,我们先来看看在Kafka的领域里有哪些组件和概念,下面是一些枯燥的名词解释,如果已经掌握,可以帮忙看看是否正确解释了。

Topic,顾名思义,主题的意思。可以理解为是对某一类型的消息的标识,kafka处理的消息集按照Topic分类,相当于逻辑上的一个消息消息集合。

Partition,分区,数据分区,数据分片,这是物理存储上的分组,每一个Topic可能对应多个分片,比如Topic为Order的消息需要存放5TB的数据到磁盘,如果分配5个Partition,每个partition就是1TB的数据。

一直在说kafka是分布式,高可靠的消息系统,那么这里就有所体现,多个Partition可以分散在不同的服务器上,将数据存储到不同服务器的磁盘上。

Broker,Kafka是可以分布式部署集群,集群中多台服务器,每台部署一个Kafka进程,这个Kafka进程就称之为Broker。

Message,消息,Kafka世界里的通信的基本单位,生产者和消费者基于Topic进行消息的流转。

Producers,消息或者数据的生产者,可以选择向Kafka的某个主题的某个分区发送消息。

Consumers,消息或者数据的消费者,可以从多个topics接受并处理消息,一个topic的数据可以被多个Consumer接收处理。

这图中大概画了几个组件的样子,简单的说他们之间的关系:一个Broker是一个Kafka进程,一个Broker有多个Topic,一个Topic可能有多个分区的。

02  Kafka如何存储数据?

我们知道Kafka是基于磁盘持久化存储的高可靠的消息系统。每次往一个Topic写入一条消息,就会定位到一个Partition上,相当于是写到磁盘上的一个日志文件,并且将消息追加写入到日志文件中。

消息会被封装到一个log entry,每一个日志条目都包含一个offset,消息大小和消息内容。offset是有序的,代表了在日志文件中的顺序,是唯一标记此消息的标识。Kafka是基于NIO的ByteBuffer来进行序列化成二进制进行存储,这样子也是最大化的保证存储的紧凑,节省磁盘的空间。

而Kafka的消息结构设计也随着版本的升级,有很多变化,正是因为对消息结构的优良设计,从而做到了存储紧凑,节省磁盘的存储空间。消息的格式是这样子滴:

消息格式设计的演变,也可以看出,通过引入RecordBatch,加上字段可变长度的消息体来节省磁盘空间,提高序列化的速度。V2版本里面时间戳增量,offset的增量也通过使用增量差值来节省存储的字节数。

上面也说了,每次消息发送到kafka,就会根据一定规则路由到某个Partition,并追加到磁盘的某个人日志文件的偏移量为offset的位置。

可以从图中看出,每一个Topic都是分散存储的,也就是多个Partition,在分布式集群部署下,TB级别数据实现扩容存储,分布式存储。

03 Kafka扑街了,如何保证高可用?

此时,如果kafka宕机了,从我们前面一直分析的来说,那我们将会丢失一个Topic下的某个Partition里的数据,这个问题就很严重了,数据丢失一向是架构设计里很重视的一个问题。所以Kafka是对所有的Partition做了多副本冗余的。

并且,将每个Partition的副本都是放到其他机器上,假设一个Partition有三个副本,kafka还会借助zookeeper选举出一个leader Partition,这个leader partition就是这个partition负责对外提供读写的服务。其他的follower partition 会定时同步数据。

假设此时leader  partition宕机了,zookeeper会感知到,并且会在kafka集群选举出新的leader partition提供服务,新的leader partition拥有之前同步到的所有数据,通过这样的多副本冗余机制加上主从模式,宕机选主,就可以实现高可用啦。

04 kafka如何做到数据不丢失?

通过多副本冗余机制,我们可以实现高可用性,但是细思一番,上文中有这样一种场景,假如leader所在进程宕机了,此时数据还没有被follower同步,那么当follower选举成leader之后,此处就会丢失部分没有同步到的数据,这样子真是蛋疼了。

这里我们关注一个新的名字 ISR (in sync replicas),副本同步队列。每一个leader都维护一份ISR列表,列表中存放的是当前所有和leader partition 数据同步,保持一致的follower partition。

kafka要保证数据不丢失,那么每一个leader的ISR列表中必须至少要存在一个follower partition,那么当kafka写入数据的时候,必须是确保复制给了所有的ISR列表中的所有的follower partition,这样才能算写入成功。由此,就能保证数据不会在重新选主的时候丢失部分数据。

05 还有很多很多要去研究

Kafka是一款很优秀,很值得学习的工业级消息中间件,本文只是浅谈了他的一些基础概念和原理,还需要花费很多时间去研读他,文中有出现错误,欢迎小伙伴指正。谢谢大家。

舔一舔 · 肌霸Kafka相关推荐

  1. 舔狗舔到最后一无所有 (线性dp)

    舔狗舔到最后一无所有 感谢博主 :https://blog.csdn.net/qq_51282224/article/details/122638737 链接:https://ac.nowcoder. ...

  2. 牛客:【2021秋季算法入门班第七章习题:动态规划1】部分题解:方块与收纳盒、舔狗舔到最后一无所有、可爱の星空、[NOIP1999]拦截导弹

    题单链接:牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)  P1001 方块与收纳盒 传送门:1001-方块与收纳盒_2021秋季 ...

  3. 牛客动态规划基础题单 1002 舔狗舔到最后一无所有

    递推动规 题目链接:舔狗舔到最后一无所有 题目大意:有三种外卖可以任意点,但要求不能连续三天点同一种外卖,问点n天外卖有多少种可行的方案. dp数组: f[i]:第i天买1号外卖的方案数,由于买2,3 ...

  4. 动漫界的五大舔狗 舔龟双面、舔猫Tom、舔羊阿沸、卑微正男、舔虎小黑

    舔羊阿沸-沸羊羊: <喜羊羊与灰太狼>中的配角,身材健硕,头脑一根筋.一直喜欢羊村里的美羊羊,而美羊羊却一直喜欢喜羊羊.美羊羊是一个著名的绿茶双标女,同样是打架,在她眼里喜羊羊是帅气,沸羊 ...

  5. 刷题记录:牛客NC20875舔狗舔到最后一无所有

    传送门:牛客 题目描述: 作为队伍的核心,forever97很受另外两个队友的尊敬. Trote_w每天都要请forever97吃外卖,但很不幸的是宇宙中心forever97所在的学校周围只有3家fo ...

  6. 舔狗舔到最后一无所有(简单动态规划)

    首先看题 不多说废话,直接上思路: 设三中爱吃的外卖为a,b,c; 如果第i天吃a,若第 i-1 天吃a,则 i-2 天一定吃b或者c,若第 i-1天吃b或者c,则 i-2 天吃什么都行. 如果第i天 ...

  7. 吃货减肥福音!舔一舔尝遍天下美味?

    美国计算机协会(ACM)数字图书馆最近公布的一项研究表明,研究人员已经开发出一种"舔屏"的设备,这种设备能够在与人类舌头接触时重现食物的味觉. 1 模拟虚拟食物味道的数字设备 日本 ...

  8. I·See·Right 遇见kafka的ISR

    ​目录 1.kafka霸道性能之揭开日志底层存储的面纱 2.HW?LEO?你俩一起搞事情? 3.ISR机制底层如何设计? 这是2020年的第一篇文章,新的开始,与君共勉.前文小白简单的去剖析了肌霸先生 ...

  9. 他被女朋友拉黑后,写了个“舔狗”必备神器

    在一个阳光明媚的清晨,我打开窗户呼吸了一口新鲜空气.阳光灿烂,岁月静好,又是一个约女朋友出去爬山吃饭看电影的好日子. 图片来自包图网 想到女朋友的大眼睛,我脸上不禁洋溢起了幸福的微笑.打开微信,给女朋 ...

最新文章

  1. 连华为都在研究的计算机视觉,到底有多牛?
  2. 当上 CTO 才发现:程序员时常犯的 4 个错误有多可怕!
  3. poj2739(尺取法+质数筛)
  4. X/Open DTP模型与XA协议的学习笔记
  5. 第1课 - make和makefile
  6. 【commons】Bean工具类——commons-beanutils之BeanUtils
  7. 中压缩数组_Java稀梳数组,什么是稀梳数组?为什么使用稀梳数组?
  8. 报时功能_现在的智能机都没有内置整点自动报时吗?锤子坚果手机SOS有!
  9. 百度域名出现问题 2010-1-12号的杯具
  10. linux上很方便的上传下载文件工具rz和sz使用介绍
  11. list转字符串_剑指offer 38——字符串的排列
  12. JS-数组-声明方式-读写添加删除-遍历
  13. 快速计算属于你的数字
  14. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_5 Mybatis中使用Dao实现类的执行过程分析-查询方法1...
  15. backupexec Oracle授权,通过BackupExec重定向Oracle 8I数据库
  16. 惠普计算机开机半花屏,惠普电脑花屏怎么办
  17. 生成PDF并上传到图片服务器
  18. crm系统是什么很棒ec实力_哪个CRM系统好
  19. 渗透测试中遇到的Adminer任意文件读取漏洞
  20. adc 采样时间 采样周期数 采样频率计算(以stm32为例)

热门文章

  1. rasp 系统_一类PHP RASP实现
  2. 小学三年级另类语文题难住大学副教授(图)
  3. WIN10系统ThinkPad S5 3D摄像头终极解决方案(实感深度摄像头)
  4. 「MySQL」- 基础增删改查
  5. 华硕重装后进入bios_重装系统以后,开机自动进bios,进不了系统怎么办
  6. MIT 操作系统实验 MIT JOS lab1
  7. Android音视频开发;斗鱼直播实现
  8. tomcat启动报错:apache-tomcat-6.0.45/webapps/manager does not exist or is not a readable directory
  9. 如何修改vant组件中filed的placeholder的 颜色
  10. navicat 表合并查询_navicat怎么合并表格