|jsh12.com
手艺频道
|
51CTO旗下网站
|
|
挪动端

突发宕机,Kafka写入的数据怎样包管不丧失?

上周分享的一篇文章《Kafka怎样实现每秒上百万的超高并发写入?》,信赖人人皆知道了写入 Kafka 的数据是会落地写入磁盘的,那篇给人人聊下写入 Kafka 的数据该怎样包管其不丧失?

作者:中华石杉泉源:|2019-03-13 09:27

上周分享的一篇文章《》,信赖人人皆知道了写入 Kafka 的数据是会落地写入磁盘的,那篇给人人聊下写入 Kafka 的数据该怎样包管其不丧失?

我们临时不思索写磁盘的详细历程,先大抵看看上面的图,那代表了 Kafka 的中心架构道理。

Kafka 分布式存储架构

那么如今题目去了,若是天天发生几十 TB 的数据,岂非都写一台机械的磁盘上吗?那显着是不靠谱的啊!

以是道,这里便得思索数据的分布式存储了,我们联合 Kafka 的具体情况去说说。

在 Kafka 内里,有一个中心的观点叫做“Topic”,这个 Topic 您便权且以为是一个数据集合吧。

举个例子,若是您如今有一份网站的用户行动数据要写入 Kafka,您能够搞一个 Topic 叫做“user_access_log_topic”,这里写入的都是用户行动数据。

然后若是您要把电商网站的定单数据的增删改调换纪录写 Kafka,那能够搞一个 Topic 叫做“order_tb_topic”,这里写入的都是定单表的调换纪录。

然后如果道我们举个例子,便道这个用户行动 Topic 吧,内里若是天天写入几十 TB 的数据,您以为都放一台机械上靠谱吗?

显着不太靠谱,以是 Kafka 有一个观点叫做 Partition,就是把一个 Topic 数据集合拆分为多个数据分区,您能够以为是多个数据分片,每一个 Partition 能够在差别的机械上,贮存局部数据。

如许,不便能够把一个超大的数据集合分布式存储在多台机械上了吗?人人看下图,一起来体味一下。

Kafka 下可用架构

然则这个时候,我们又会碰到一个题目,就是万一某台机械宕机了,那台机械上的谁人 Partition 管理的数据不便丧失了吗?

以是道,我们借得做多副本冗余,每一个 Partition 皆能够搞一个副本放在其余机械上,如许某台机械宕机,只不过是 Partition 个中一个副本丧失。

若是某个 Partition 有多副本的话,Kafka 会推举个中一个 Parititon 副本作为 Leader,然后其他的 Partition 副本是 Follower。

只要 Leader Partition 是对外供应读写操纵的,Follower Partition 就是从 Leader Partition 同步数据。

一旦 Leader Partition 宕机了,便会推举其他的 Follower Partition 作为新的 Leader Partition 对外供应读写服务,这不便实现了下可用架构了?

人人看上面的图,看看这个历程:

金沙bb电子糖果派对

Kafka 写入数据丧失题目

如今我们来看看,什么状况下 Kafka 中写入数据会丧失呢?实在也很简朴,人人皆晓得写入数据都是往某个 Partition 的 Leader 写入的,然后谁人 Partition 的 Follower 会从 Leader 同步数据。

然则万一 1 条数据刚写入 Leader Partition,借出来得及同步给 Follower,此时 Leader Partiton 地点机械忽然就宕机了呢?

人人看下图:

如上图,这个时候有一条数据是出同步到 Partition0 的 Follower 上去的,然后 Partition0 的 Leader 地点机械宕机了。

此时便会推举 Partition0 的 Follower 作为新的 Leader 对外供应服务,然后用户是否是就读不到适才写入的那条数据了?

由于 Partition0 的 Follower 上是没有同步到最新的一条数据的。这个时候便会形成数据丧失的题目。

Kafka 的 ISR 机制是什么?

如今我们先留着这个问题不说详细怎样处理,先回过头来看一个 Kafka 的中心机制,就是 ISR 机制。

这个机制简朴来讲,就是会主动给每一个 Partition 保护一个 ISR 列表,这个列内外一定会有 Leader,然后借会包含跟 Leader 连结同步的 Follower。

也就是说,只要 Leader 的某个 Follower 一向跟他连结数据同步,那么就会存在于 ISR 列内外。

然则若是 Follower 由于本身发作一些题目,致使不克不及实时的从 Leader 同步数据已往,那么这个 Follower 就会被以为是“out-of-sync”,被从 ISR 列内外踢进来。

以是人人先得晓畅这个 ISR 是什么,说白了,就是 Kafka 主动保护和监控哪些 Follower 实时的跟上了 Leader 的数据同步。

Kafka 写入的数据怎样包管不丧失?

以是若是要让写入 Kafka 的数据不丧失,您需求包管以下几点:

  • 每一个 Partition 皆最少得有 1 个 Follower 在 ISR 列内外,跟上了 Leader 的数据同步。
  • 每次写入数据的时刻,皆要求最少写入 Partition Leader 胜利,同时另有最少一个 ISR 里的 Follower 也写入胜利,才算这个写入是胜利了。
  • 若是不满足上述两个前提,那便一向写入失利,让消费体系一直的实验重试,直到知足上述两个前提,然后才气以为写入胜利。
  • 根据上述思绪去设置响应的参数,才气包管写入 Kafka 的数据不会丧失。

好!如今我们去剖析一下上面几点要求。

第一条,必需要求最少一个 Follower 在 ISR 列内外。

那必需的啊,如果 Leader 没有 Follower 了,大概是 Follower 皆没法实时同步 Leader 数据,那么这个事儿一定便没法弄下去了。

第二条,每次写入数据的时刻,要求 Leader 写入胜利之外,最少一个 ISR 里的 Follower 也写胜利。

人人看上面的图,这个要求就是包管道,每次写数据,必需是 Leader 和 Follower 皆写胜利了,才气算是写胜利,包管一条数据必需有两个以上的副本。

这个时候万一 Leader 宕机,便能够切换到谁人 Follower 上去,那么 Follower 上是有刚写入的数据的,此时数据便不会丧失了。

如上图所示,如果如今 Leader 没有 Follower 了,大概是刚写入 Leader,Leader 立马就宕机,借出来得及同步给 Follower。

在这种情况下,写入便会失利,然后您就让生产者一直的重试,直到 Kafka 规复一般知足上述前提,才气继承写入。如许便能够让写入 Kafka 的数据不丧失。

总结

最初总结一下,实在 Kafka 的数据丧失题目,涉及到各个方面。

比如消费端的缓存题目,包孕消耗端的题目,同时 Kafka 本身内部的底层算法和机制也能够致使数据丧失。

然则日常平凡写入数据碰到比较大的一个题目,就是 Leader 切换时能够致使数据丧失。以是本文仅仅是针对这个问题道了一下消费情况处理这个问题的计划。

【编纂推荐】

【责任编辑:武晓燕 TEL:(010)68476606】3016js金沙国际

点赞 0
  •     
分享:
人人皆在看
猜您喜好

编纂推荐

存眷
头条
热点
头条
热点
24H热文
一周话题
本月最赞

定阅专栏

实战直通车
共35章 | UbuntuServer金沙bb电子糖果派对

228人定阅进修

把握Java中心
共30章 | 51CTO王波

87人定阅进修

MySQL入门到高阶
共24章 | 51CTO叶先生

483人定阅进修

视频课程

讲师:19961人进修过

讲师:23282人进修过

讲师:13206人进修过

CTO品牌

最新专题

精选博文
论坛热帖
下载排行

读 书

主要内容: ● 怎样设想像主动售货机那样有用的用户界面。 ● 深切明白窗口和对话框的管理机制。 ● 为何机能优化取我们在直觉上的理...
3016js金沙国际

定阅51CTO邮刊

07958.com

51CTO服务号

51CTO播客

3016js金沙国际