KafKa数据存储与数据一致性保证

kafka读取写入数据 立即下载

 

tianjinsong 2016-10-31 21:03:13  6141  收藏

展开

http://yonghuiyang.github.io/2015/12/04/kafka_data_store/

 

数据存储

Topic

一类消息称为一个Topic
kafka_store.pnguploading.4e448015.gif转存失败重新上传取消

Topic逻辑结构

  1. Topic可分为多个Parition;
  2. Parition内部保证数据的有序,按照消息写入顺序给每个消息赋予一个递增的offset;
  3. 为保证数据的安全性,每个Partition有多个Replica

多Parition的优点

  1. 并发读写,加快读写速度
  2. 多Partition分布式存储,利于集群数据的均衡
  3. 加快数据恢复的速率:当某台机器挂了,每个Topic仅需恢复一部分的数据,多机器并发

缺点

  1. Partition间Msg无序,若想保证Msg写入与读取的序不变,只能申请一个Partition

Partition

kafka_partition.pnguploading.4e448015.gif转存失败重新上传取消

Partition存储结构

  1. 每个Partition分为多个Segment
  2. 每个Segment包含两个文件:log文件和index文件,分别命名为start_offset.log和start_offset.index
  3. log文件包含具体的msg数据,每条msg会有一个递增的offset
  4. Index文件是对log文件的索引:每隔一定大小的块,索引msg在该segment中的相对offset和在log文件中的位置偏移量

kafka_log_index.pnguploading.4e448015.gif转存失败重新上传取消

根据offset查找msg的过程

  1. 根据msg的offset和log文件名中的start_offset,找到最后一个不大于msgoffset的segment,即为msg所在的segment;
  2. 根据对应segment的index文件,进一步查找msg在log文件中的偏移量
  3. 从log文件的偏移量开始读取解析msg,比较msgoffset,找到所要读取的msg

Partition recovery过程

每个Partition会在磁盘记录一个RecoveryPoint, 记录已经flush到磁盘的最大offset。当broker fail 重启时,会进行loadLogs。首先会读取该Partition的RecoveryPoint,找到包含RecoveryPoint的segment及以后的segment, 这些segment就是可能没有完全flush到磁盘segments。然后调用segment的recover,重新读取各个segment的msg,并重建索引

优点

  1. 以segment为单位管理Partition数据,方便数据生命周期的管理,删除过期数据简单
  2. 在程序崩溃重启时,加快recovery速度,只需恢复未完全flush到磁盘的segment
  3. 通过命名中offset信息和index文件,大大加快msg查找时间,并且通过分多个Segment,每个index文件很小,查找速度更快

数据的同步

kafka_replica.pnguploading.4e448015.gif转存失败重新上传取消

数据流

  1. Partition的多个replica中一个为Leader,其余为follower
  2. Producer只与Leader交互,把数据写入到Leader中
  3. Followers从Leader中拉取数据进行数据同步
  4. Consumer只从Leader拉取数据

ISR:所有不落后的replica集合, 不落后有两层含义:距离上次FetchRequest的时间不大于某一个值或落后的消息数不大于某一个值,Leader失败后会从ISR中选取一个Follower做Leader

数据可靠性保证

当Producer向Leader发送数据时,可以通过acks参数设置数据可靠性的级别

  1. 0: 不论写入是否成功,server不需要给Producer发送Response,如果发生异常,server会终止连接,触发Producer更新meta数据;
  2. 1: Leader写入成功后即发送Response,此种情况如果Leader fail,会丢失数据
  3. -1: 等待所有ISR接收到消息后再给Producer发送Response,这是最强保证

仅设置acks=-1也不能保证数据不丢失,当Isr列表中只有Leader时,同样有可能造成数据丢失。要保证数据不丢除了设置acks=-1, 还要保证ISR的大小大于等于2,具体参数设置:

  1. request.required.acks:设置为-1 等待所有ISR列表中的Replica接收到消息后采算写成功;
  2. min.insync.replicas: 设置为大于等于2,保证ISR中至少有两个Replica

Producer要在吞吐率和数据可靠性之间做一个权衡

数据一致性保证

一致性定义:若某条消息对client可见,那么即使Leader挂了,在新Leader上数据依然可以被读到

  1. HW-HighWaterMark: client可以从Leader读到的最大msg offset,即对外可见的最大offset, HW=max(replica.offset)
  2. 对于Leader新收到的msg,client不能立刻消费,Leader会等待该消息被所有ISR中的replica同步后,更新HW,此时该消息才能被client消费,这样就保证了如果Leader fail,该消息仍然可以从新选举的Leader中获取。

对于来自内部Broker的读取请求,没有HW的限制。同时,Follower也会维护一份自己的HW,Folloer.HW = min(Leader.HW, Follower.offset)

HDFS数据组织

hadoop_data_flow.pnguploading.4e448015.gif转存失败重新上传取消
与Kafka有几点明显不同:

  1. 数据分块,比如以64M为一个数据块;
  2. 流水线复制:每个数据块没有Leader和Follower之分,采用流水线的方式进行数据复制;
  3. 就近读取:为了减少读取时的网路IO,采用就近读取,加快读取速率
基于OpenSSL的CA建立及证书签发(签发多域名/IP) 自签SSL证书(多域名/IP) 本文基于以下环境: 内核信息:Linux zabbix 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 系统版本:CentOS Linux release 7.6.1810 (Core) OpenSSL版本:OpenSSL 1.0.2k-fips 26 Jan 2017 【前言】 在基于OpenSSL的CA建立及证书签发一文中(后面统. 阅读详情

相关推荐

PPO算法详解:基于CartPole-v1的强化学习实现

PPO算法详解:基于CartPole-v1的强化学习实现

m0_54720701的博客 865

通过kafka学习数据一致性

Kafka通过分区与副本机制、ISR机制、消息提交确认、原子性操作和容错处理等手段,确保数据一致性。这些设计使得Kafka能够在分布式环境中实现高吞吐量、持久化存储、可扩展性和高可靠性等特性从而满足各种复杂场景下的数据一致性需求。

wangkai6666的博客 1752

编译原理2024期末复习(面向做题,大题速学)【太原理工大学】

归约-归约”冲突就是在项目集规范族一个状态中两个。

m0_63181421的博客 1万+

聊聊 Kafka:Kafka 如何保证一致性

本文从高水位更新机制、副本同步机制以及 Leader Epoch 几个方面去剖析Kafka 是如何保证一致性的~

riemann_的博客 6365

流形优化: Manifold Optimization 的 全网最通俗版本详解 (一)

前言 之前忙于论文, 停更了很久。 接下来的一段时间,出于各种原因, 决定在优快云平台上做 最近在 混合波束成形 及 智能反射面 领域 非常常见的流形优化 (Manifold Optimization) 算法 的专题介绍。尽管目前已有了不少的中文博客, 但出于其各种弊端, 使得本篇的成文仍有其不可或缺的意义。 而如果要盘点最核心的意义, 就在于这篇是对读者的 数学能力 与 阅读理解能力 要求最低的 流形优化讲解了。 唯一参考的文献为 Manopt 工具包作者 Boumal 的 新书: An introd

B417科研笔记 2万+

task5:在本地搭建大模型(ollama 和 LM studio 对比),接入 openclaw

关于大模型,大家千万不要想着在本地部署,根本不可行,没有那个财力。另外大模型迭代快,不可能每周都在下载大模型。再次,还是国外的模型好用,国内的模型真的在 deepresearch 上就有很大问题,你们懂的。所以本篇文章,还是聚焦在探索层面+实操,并不会实战。

这里是 AI 食用指南,持续分享有用的AI 实操和应用! 1968

Kafka高级_生产者ACk机制&数据一致性问题

每个分区都有多个副本,其中一个被选为领导者,负责处理所有的读写请求,其余副本作为追随者,只负责与领导者进行数据同步。因此,在领导者写入数据之后,追随者可能还没有完全同步,这导致了部分数据一致性的问题。当追随者与领导者之间的复制延迟过高时,追随者将被自动踢出ISR,这样可以避免延迟过高的副本对数据一致性造成影响。这样可以减少延迟,提高吞吐量,但也会导致数据在多个副本之间存在一定的延迟,从而可能出现数据不一致的情况。通过增加ISR中的副本数量,可以提高数据的容错性和可用性,但也会增加复制延迟。

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 1709

量化投资从0开始系列 ---- 15. 郑商所日统计数据

前面已经提取了其它期货交易所的数据,最后还剩下郑商所。相比而言,郑商所的数据获取比其它几个交易所更麻烦一点。因为郑商所的系统接口有两个,在2015年11月11日前后发生了切换,这个日期之前是老系统的api接口,这个日期之后是一个新的api接口。 具体的地址在哪里,还是依靠在浏览器中按F12来确定,最后发现的地址是: if trade_date > '20151111': czce_url = f'http://www.czce.com.cn/cn/DFSS

kengxie的博客 2112

【Kafka】深入探讨 Kafka 如何保证一致性

Kafka 通过一系列精心设计的机制,包括生产者确认机制、ISR 集合、消费者位移管理、一致性读取策略以及故障处理与恢复机制,在保证高性能和高可用性的同时,有效地确保了数据的一致性。这些机制相互配合,使得 Kafka 成为一款在分布式系统中广泛应用的可靠消息队列系统。理解 Kafka 的数据一致性机制,对于开发者设计和构建稳定、可靠的分布式应用至关重要。

weixin_43918863的博客 1661

用 dism 合并与删除 wim 映像

一、合并 假设 installA.wim 有 3 个映像,installB.wim 有 1 个映像。 1、全部合并 将 installA.wim 中的 3 个卷映像合并到 installB.wim 中,这样 installB.wim 中的卷映像增加到 4 个。 dism/export-image/sourceimagefile:d:\installA.wim/sourceindex:1/destinationimagefile:d:\installB.wim dism/export-image/source

KefanWon的博客 5199

SAP-ABAP:SAP中的用户确认对话框:深入理解与实践POPUP_TO_CONFIRM

本文深入介绍了SAP中的用户确认对话框函数POPUP_TO_CONFIRM,包括其核心参数配置、返回值处理、应用场景和最佳实践。该函数是SAP二次开发中重要的交互工具,用于关键操作前获取用户确认,防止误操作。文章详细解析了参数设置技巧,强调必须全面处理所有可能的返回值,并提供了删除数据、批量操作等典型应用场景的代码示例。同时对比了其他类似弹出函数,帮助开发者选择合适工具。正确使用该函数可提升系统安全性、改善用户体验并符合SAP设计规范。

baidu_35680696的博客 970

Kafka数据一致性问题

3 手动提交offset和自动提交offset引起的问题 (消费者事务)精确一次 -1 + 副本数大于等于2 + isr响应大于等于2。仅仅保证了数据的一致性,未解决数据的重复性和漏掉问题。leader挂掉之后引起不不一致 HW LEO。

qq_34914039的博客 230

15、降维算法:原理、实现与应用

本文深入介绍了多种降维算法,包括线性方法如主成分分析(PCA)和线性判别分析(LDA),以及非线性方法如Sammon映射、t分布随机邻域嵌入(t-SNE)和自编码器。文章通过C++库Dlib和Shogun展示了这些算法的具体实现,并结合图像压缩和数据可视化等实际案例,分析了不同算法的适用场景。此外,还探讨了降维算法的选择策略、优化改进方法以及未来发展趋势,为读者提供了全面的技术理解和应用指导。

lemon的博客 115

##[一致性]KafKa数据存储与数据一致性保证

转自——KafKa数据存储与数据一致性保证 - tianjinsong的专栏 - 博客频道 - youkuaiyun.com http://blog.youkuaiyun.com/bluetjs/article/details/52986652数据一致性保证一致性定义:若某条消息对client可见,那么即使Leader挂了,在新Leader上数据依然可以被读到HW-HighWaterMark: client可以从Lea...

Orange_NanLu的博客 1175

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

kafka ack设置_kafka 原理深度解读

前文介绍了kafka的一些基本原理,接下来我们深入了解下关于kafka的一些机制和优化partition 文件存储机制前文提到过,一个topic是分成多个partition 存储的;topic是逻辑上的概念,partition是物理上的概念,如图所示:通过图片我们可以看出,虽然每个partition内部是有序的,但对于整个topic而言它是无法保证有序性的。partition 的数据会以...

weixin_32158567的博客 2171

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

kafka的一些简单操作

kafka搭建集群,我这里就不写了 https://www.cnblogs.com/wangxiaoheng/articles/10000791.html 我的环境是搭建了3台kafka的集群: 下面是kafka的一些命令操作: 一、使用./kafka-topics.sh命令 1、使用下面的命令可以查看,有那些命令 ./kafka-topics.sh --list --zook...

wojiao228925661的博客 2474

kafka架构详解

大佬1 | 大佬2 以下博文由上面两个大神的博文整理 kafka整体架构 角色: broker 装有 kafka服务的集群(kafka代理),进行kafka集群管理(controle)和消息存储,一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。 produce 向Kafka发布(写)消息的客户端应用程序 consumer 订阅(读和处理)这些消息的客户端应用程序 生产者和消费者是完全解耦的,并且彼此是不可知的,这使得其变得非常容易扩展和灵活 Co

尤托匹亚的博客 327

kafka

个人笔记,不喜勿喷

hxhxhzjz的博客 683

kafka概念扫盲

一、kafka概述 1.1、定义 Kakfa是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域 1.2、消息队列 1.2.1、传统的消息队列&新式的消息队列的模式 上面是传统的消息队列,比如一个用户要注册信息,当用户信息写入数据库后,后面还有一些其他流程,比如发送短信,则需要等这些流程处理完成后,在返回给...

优质后端技术知识记录 587

Kafka 核心知识

消息队列(MessageQueue):是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合异步消息流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。简单点说:消息队列MQ用于实现两个系统之间或者两个模块之间传递消息数据时,实现数据缓存。负责往消息队列中写数据负责从消息队列中读数据临时存放两个系统之间需要传递的数据数据的分类,用于区分消息队列中不同的业务的数据生产者往消息队列中生产数据,将数据写入对应的主题中;消费者可以订阅。

qq_49948651的博客 534

面试过程中关于 Kafka 核心知识灵魂 16 问

上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka 在中间可以起到一个缓冲的作用,把消息暂存在 kafka 中,下游服务就可以按照自己的节奏进行慢慢处理。项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。可以采用一对多的方式,一个生产者发布消息,可以被多个订阅 topic 的服务消费到,供多个毫无关联的业务使用。健壮性: 消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正

l688899886的博客 370

一文搞懂Kafka:女朋友看了也懂的Kafka

文章目录前言:为什么需要Kafka1.初识kafka1.1 消息队列的好处:1.2 **消息队列的两种模式**没有消息队列我们怎么做?传统MQ怎么做?这时候,Kafka就”闪亮登场“了2. Kafka基本架构2.1 **前备知识**:1.消息和批次2.消息模式2.2 架构分析2.3Kafka 特点1.多个生产者2.多个消费者3.基于磁盘的数据存储4.伸缩性5.高性能3 总结 前言:为什么需要Kafka 举个例子:麦当劳点餐时,当我们选择外带的时候,餐厅制作好餐之后会放在一个取餐台,而且取餐台是按照不同的取餐

清风的博客 2468

Kafka原理综合

kafka2.4之后,kafka提供了有限的读写分离,也就是说follower副本能够提供读服务 之前没有,因为读写分离适用于读负载很大,而写操作相对不频繁的场景.可kafka不属于这样的场景 同步机制:kafka采用pull 方式实现follwer的同步,因此Follwer与leader存在不一致性窗口,如果允许读follwer副本,就势必要处理消息滞后的问题 Kafka数据存储流程 Partition 一个有序的队列,以文件夹的形式存储在具体broker本机上 leo 表示每个partit

林甲城QAQ的博客 632

Kafka Learn

文章目录@[TOC]一、Kafka 介绍1.1 什么是 Kafka1.2 消息队列的优势1.3 消息队列的模式1.4 Kafka 的消息队列1.5 Kafka 的特性 & 消费原则1.6 Kafka 的使用场景二、Kafka 基本术语与基础架构2.1 Kafka 的基本术语(结合架构图记忆)2.2 Kafka 的系统架构三、Kafka 的架构深入3.1 Kafka 工作流程及文件存储机制3.1.1 Kafka 工作流程3.1.2 Kafka 文件存储机制3.2 Kafka 生产者3.2.1 分区策略

qq_44992559的博客 435

Kafka学习笔记

官网httpKafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。消息中间件1.天生分布式2.存储数据3.流处理(聚合、统计)...

m0_52712579的博客 840

Kafka 核心知识点灵魂 16 问

而 offset 的信息在 kafka0.8 版本之前保存在 zookeeper 中,在 0.8 版本之后保存到 topic 中,即使消费者在运行过程中挂掉了,再次启动的时候会找到 offset 的值,找到之前消费消息的位置,接着消费,由于 offset 的信息写入的时候并不是每条消息消费完成后都写入的,所以这种情况有可能会造成重复消费,但是不会丢失消息。可以采用一对多的方式,一个生产者发布消息,可以被多个订阅 topic 的服务消费到,供多个毫无关联的业务使用。可以简化代码的实现逻辑,减少出错的可能;

wr_java的博客 465
上一篇: 线程的六种状态及其状态的转换
下一篇: Kafka之数据存储
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值