文章目录

  • Kafka工作流程及文件存储机制

    • 工作流程:

    • topic底层存储:

  • Producer生产者架构:

    • 一:分区存储策略:

      • 1.分区的原因:

      • 2.分区的原则:

        • ProducerRecord构造器:

    • 二:数据可靠性保证策略:

      • 生产者到Kafka端发送数据:

        • 副本数据同步策略:

        • ISR:动态集合in-sync replica set

        • 故障节点发生处理细节:

        • ack应答机制:

        • Exactly Once语义:

          • 幂等性实现:

Kafka工作流程及文件存储机制

工作流程:

  • 第一步:生产者往broker的topic的leader发送数据,follower同步数据

  • 第二步:消费者从leader去消费数据

topic底层存储:

  • topic分为多个partition

  • 每个分区的文件分成多个segment,

  • segment存着.log日志文件和.index索引文件

offset=8 通过名称先确定是哪一个index文件,再用offset-文件名找到是第几个偏移量。

index和log位于同一个文件夹下,文件夹命名规则是:topic名称+ 分区序号

Producer生产者架构:

一:分区存储策略:

1.分区的原因:

  • 方便集群中扩展

  • 可以提高并发

2.分区的原则:

producer发送数据封装成ProducerRecord对象

ProducerRecord构造器:

  • 指明partition的情况下,直接将指明的值直接作为partition值

  • 没有指明partition值但由key的情况下,会将key的hash值与topicpartition进行取余得到partition值

  • 没有指明partition值也没有key的情况下,第一次调用随机生成一个整数(后面每次调用在整数上自增),将这个值与topic可用的partition总数取余得到partition值,也就是round-robin算法。

二:数据可靠性保证策略:

生产者到Kafka端发送数据:

producer给leader发送完数据后,leader会将follower同步完成后,leader再发送ack,这样才能保证leader挂掉之后,能再follower中选举出合适的leader,

副本数据同步策略:
  • kafka由于会存放大量数据,不会去选择半数存活机制,半数会造成大量数据冗余。

  • 因为都是部署在一个机架上的,所以网络延迟对kafka影响比较小

多少个follower同步完成后发送ack?

半数以上,因为为了防止脑裂同时参与投票也需要半数以上,

ISR:动态集合in-sync replica set

当有follower完成数据同步后,follower就给leader发送ack,follower长时间未响应,将被踢出ISR,leader故障,从ISR中选举新的leader

踢出时间阈值由:

replica.lag.time.max.ms #参数设定
故障节点发生处理细节:

LEO(log-end-offset):每个副本的最后一个offset

HW(high watemark):所有副本中最小的LEO

  • follower故障:

follower会被踢出ISR,follower读取本地磁盘的记录得HW,高于log文件得全部删掉,从HW开始进行向leader同步

等该 follower 的 LEO 大于等于该 Partition 的 HW,即 follower 追上 leader 之后,就可以重新 加入 ISR 了。

  • leader故障:

leader发生故障后,从ISR中选出一个新的leader之后,,之后,为保证多个副本之间的 数据一致性,其余的 follower 会先将各自的 log 文件高于 HW 的部分截掉,然后从新的 leader同步数据。

只能保证副本得数据一致性

ack应答机制:
  • ack参数等级

    • 0:

      producer不等待broker的ack,broker已接受到还没写入磁盘就返回成功,可能会造成数据丢失

    • 1:

      producer等待broker的ack,partition的leader落盘成功返回ack,follower同步成功之前leader故障,数据可能会丢失

    • -1(all):

      leader和follower全部落盘成功才返回ack,当follow同步完成之后,leader挂了,producer又发了一次写入broker请求,结果在另外一个leader又写了一次,造成数据重复

Exactly Once语义:

保证每条信息被发送且仅被发送一次

0.11后,kafka引入幂等性机制(dempotent)(实例化一次机制),配合acks = -1时得at least once语义(会重复不丢失),完成了exactly once

只需将enable.idempotence属性设置为true,kafka自动将acks属性设为-1

幂等性实现:

开启幂等性的 Producer 在初始化的时候会被分配一个 PID,发往同一 Partition 的消息会附带 SequenceNumber。而 Broker 端会对做缓存,当具有相同主键的消息提交时,Broker 只会持久化一条。
但是 PID 重启就会变化,同时不同的 Partition 也具有不同主键,所以幂等性无法保证跨 分区跨会话的 ExactlyOnce

kafka 不同分区文件存储_Kafka 系列(二)文件存储机制与Producer架构原理怎样保证数据可靠性??...相关推荐

  1. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  2. Kafka 是如何保证数据可靠性和一致性

    学过大数据的同学应该都知道 Kafka,它是分布式消息订阅系统,有非常好的横向扩展性,可实时存储海量数据,是流数据处理中间件的事实标准.本文将介绍 Kafka 是如何保证数据可靠性和一致性的. 数据可 ...

  3. [ Android 五种数据存储方式之二 ] —— 文件存储数据

    关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. 文件可用来存放大量数据,如文本.图片.音 ...

  4. docker tag 删除images_深入浅出 Docker (二) —— Docker的基本概念和架构原理

    1. Docker 的基本概念 Docker 有三个基本概念: 镜像(Image) 容器(Container) 仓库(Repository) 1.1 镜像(Image) 操作系统分为内核和用户空间.对 ...

  5. kafka保证数据可靠性的方式

    可靠性保证和复制机制 Kafka的以下几个基本特性保证了基本的可靠性: Kafka保证一个分区的消息是FIFO的 只有消息写入了所有分区的同步副本时,才认为是已提交的 只要有一个副本活跃,则消息就不会 ...

  6. sql server 索引阐述系列二 索引存储结构

    "流光容易把人抛,红了樱桃,绿了芭蕉" 转眼又年中了,感叹生命的有限,知识的无限.在后续讨论索引之前,先来了解下索引和表数据的内部结构,这一节将介绍页的存储,页分配单元类型,区的存 ...

  7. Lasso回归系列二:Lasso回归/岭回归的原理

    Lasso回归/岭回归的原理 在学习L1,L2正则化的作用和区别时,我们总是会看到这样的一副图片: 这幅图片形象化地解释了L1,L2对线性模型产生的不同的约束效果. 我最开始其实是不太理解为什么要这么 ...

  8. java发送post请求json格式_go语言web开发框架学习系列二:Get、Post、Put等请求及数据返回格式...

    数据请求方式的分类 所有的项目中使用的请求都遵循HTTP协议标准,HTTP协议经过了1.0和1.1两个版本的发展. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP ...

  9. N-Tiers设计系列(二):三层式应用系统架构

    继续上一篇的讨论.... 如果使用ASP来处理复杂的商业逻辑的网页应用系统,会有以下几个缺点 1. ASP内容复杂:如果处理数据需要复杂的处理.那么asp会变成复杂许多 2. 安全性:把数据的读取.维 ...

最新文章

  1. linux下i2c设备驱动程序,Linux I2C 设备驱动
  2. 壕!电子科大计算机学院助理教授年薪50万起步, 100万安家费+150万科研启动金!...
  3. shell特殊符号cut命令,sort_wc_uniq命令,tee_tr_split命令
  4. npm run dev 出现npm ERR!missing scrip:dev
  5. 黑苹果挂载不了分区_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!...
  6. vue通信的N种方式
  7. Chap2-构造函数语意学
  8. [渝粤教育] 四川大学 药用植物学 参考 资料
  9. Guava RateLimiter限流原理解析
  10. timer purge_Java Timer purge()方法与示例
  11. springboot整合redisson实现多种分布式锁
  12. 二叉搜索树(Binary Search Tree)(Java实现)
  13. vrrp 理论和配置
  14. 全国多年平均相对湿度空间分布数据
  15. 《淘宝技术这十年》读书笔记 (一).淘宝网技术简介及来源
  16. Foxmail设置方法
  17. 向梦想出发 - 全向轮移动底盘搭建
  18. php mysql 金钱_PHP实现货币换算的方法
  19. 合肥工业大学计算机学院加减分,合肥工业大学奖学金加减分细则(定稿修改)
  20. win10下安装多个JDK配置方法

热门文章

  1. python中关于正则表达式二
  2. 9月30号后新版CCNA考试要点
  3. 如何制作好一个提交按扭---我是个爱折腾的人
  4. 用户空间与内核空间数据交换的方式(2)------procfs
  5. 实训汇编语言设计——16位数拆分为4组
  6. [导入]MsAjax Lib- Boolean 类型扩展
  7. OpenCV-浮雕雕刻效果
  8. unity3d软阴影和硬阴影的原理_使用随机采样创建软阴影
  9. char flag[20]c语言,C语言试卷
  10. python 面试必问,不会真的要打脸~