舔一舔 · 肌霸Kafka

目录

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容