卡夫卡的藏书阁【Book4】- Kafka 主题、偏移量、分区

“There is an infinite amount of hope in the universe ... but not for us.”
― Franz Kafka
市场上每一只旗舰手机都有指纹辨识,但是苹果没有


4.1 Kafka 的基本组成:主题、偏移量、分区

https://ithelp.ithome.com.tw/upload/images/20210907/20140255yjupMNBrmY.png

每一个主题会由一个或多个生产者 ( producer ) 去推送资料给该主题,而消费者 ( consumer ) 就可以订阅该主题取得资料,新的讯息送达分区时会按照时间顺序从偏移量 ( offset ) 0一直往上累加,这个偏移量是唯一可以确定讯息所在地的值。

如上图所示,这个主题有四个分区,分区编号由0开始一直到3,每个分区的偏移量是独立的、不会受到彼此影响,这里也可以看到 Kafka 是保证该主题每个分区内的顺序性,但是并不能保证从多个分区取得资料时的顺序性。

因此主题如果有强顺序性的需求,最常见的解决方式是这个主题的生产者必须指定特定一个分区写入,这样才能保证该主题的顺序性,举例来说,一个饭店订房系统,同一笔讯息有几种状态:订房、修改房型、结算、取消订房,该笔讯息的修改房型讯息一定得等订房讯息被消费者消费掉订单成立後才能被取出,不然系统就会找不到该笔订单,这种状况可以将一个分区对应一间饭店的方式去处理,这样每间饭店就都能保证其订单顺序正确了。

2.4 在档案管理系统中的 Kafka

Kafka 是直接将资料存放到硬碟中来做到持久化的,接下来这边来看实际上资料、主题、分区、丛集在档案管理系统中
是怎麽储存的。

$ tree broker1
broker1
├── meta.properties
├── test-topic123-0
│   ├── 00000000000000000000.index
│   ├── 00000000000000000000.log
│   ├── 00000000000000000000.timeindex
│   ├── leader-epoch-checkpoint
│   └── partition.metadata
├── test-topic123-1
│   ├── 00000000000000000003.index
│   ├── 00000000000000000003.log
│   ├── 00000000000000000003.timeindex
│   ├── leader-epoch-checkpoint
│   └── partition.metadata
├── test-topic123-2
│   ├── 00000000000000000044.index
│   ├── 00000000000000000044.log
│   ├── 00000000000000000044.timeindex
│   ├── leader-epoch-checkpoint
│   └── partition.metadata
├── test-topic123-3
│   ├── 00000000000000000018.index
│   ├── 00000000000000000018.log
│   ├── 00000000000000000018.timeindex
│   ├── leader-epoch-checkpoint
│   └── partition.metadata
├── other-topic-0
│   ├── 00000000000000000001.index
│   ├── 00000000000000000001.log
│   ├── 00000000000000000001.timeindex
│   ├── leader-epoch-checkpoint
│   └── partition.metadata

每个 Kafka broker 就是一个资料夹,在这个资料夹中再去存放每个主题的分区资料,这边一一介绍主题分区资料中的档案

.log档 => 这个档案是讯息实际存放的档案,档案名称会依据该档案中第一笔讯息的偏移量去命名
.index档 => 是纪录讯息所在的物理档案位置,命名规则同.log档
.timeindex档 => 是纪录时间戳和偏移量的纪录,命名规则同.log档
leader-epoch-checkpoint => 是纪录分区领导者 ( partition leader ) 的版本资料和偏移量
partition-metadata => 纪录主题编号 ( topic_id )

$ cat partition.metadata
version: 0
topic_id: BAocHAwHR_STmwAUlI3YMw

$ cat leader-epoch-checkpoint
0
1
77 0

实际上 log 档会依据设定切分为多个 log segment,建议设定切分上限不要太低,切分太多会影响储存在硬碟中的顺序性,而 Kafka 的超高吞吐量就是依靠顺序写入硬碟而来。

├── test-topic123-1
│   ├── 00000000000000000003.index
│   ├── 00000000000000000003.log
│   ├── 00000000000000000003.timeindex
│   ├── 00000000000000000006.index
│   ├── 00000000000000000006.log
│   ├── 00000000000000000006.timeindex
│   ├── leader-epoch-checkpoint
│   └── partition.metadata

broker 的资料後续会再介绍,今天主要让大家初步了解 Kafka 的系统组成、最小的讯息单位存放了什麽资料和主题分区的相关介绍。


<<:  day3_精简指令集带给 arm 的优势与短板

>>:  CSS overflow

#05 No-code 之旅 — Next.js 的 Pages 与 Routing

嗨嗨嗨!昨天看完怎麽抓取资料的方式会影响到网页的渲染模式之後,今天的主题是 Next.js 的 Pa...

TailwindCSS 从零开始 - 切一个响应式留言按钮画面

前面了解基础的使用後,来实战一个简单的留言按钮与如何变成响应式的呈现。 基础架构 有大头照 有留言...

NIST 通用风险模型-威胁来源

-NIST 通用风险模型 (NIST SP 800-30 R1) NIST 通用风险模型描述了威胁...

学校体温自动上传爬虫(学习记录)

动机 因为疫情,这学习开始学校要求大家每天都要在九点前到学校网站上传体温,我觉得非常麻烦。 动点,果...

Day18 - [丰收款] 提供信用卡付款以及取得PayToken流程

在我们花了不少时间终於完整的完成ATM付款并成功架设Heroku网站後取回PayToken,更新付款...