人生第一份工作■Kafka架构原理,也就这么回事( 二 )
Kafka集群将 Record 流存储在称为 Topic 的类别中 , 每个记录由一个键、一个值和一个时间戳组成 。
本文插图
Kafka 是一个分布式流平台 , 这到底是什么意思?
- 发布和订阅记录流 , 类似于消息队列或企业消息传递系统 。
- 以容错的持久方式存储记录流 。
- 处理记录流 。
Topic 是逻辑上的概念 , 而 Partition 是物理上的概念 , 每个 Partition 对应于一个 log 文件 , 该 log 文件中存储的就是 Producer 生产的数据 。
Producer 生产的数据会不断追加到该 log 文件末端 , 且每条数据都有自己的 Offset 。
消费者组中的每个消费者 , 都会实时记录自己消费到了哪个 Offset , 以便出错恢复时 , 从上次的位置继续消费 。
存储机制
本文插图
由于生产者生产的消息会不断追加到 log 文件末尾 , 为防止 log 文件过大导致数据定位效率低下 , Kafka 采取了分片和索引机制 。
它将每个 Partition 分为多个 Segment , 每个 Segment 对应两个文件:“.index” 索引文件和 “.log” 数据文件 。
这些文件位于同一文件下 , 该文件夹的命名规则为:topic 名-分区号 。 例如 , first 这个 topic 有三分分区 , 则其对应的文件夹为 first-0 , first-1 , first-2 。
# ls /root/data/kafka/first-000000000000000009014.index00000000000000009014.log 00000000000000009014.timeindex 00000000000000009014.snapshotleader-epoch-checkpoint index 和 log 文件以当前 Segment 的第一条消息的 Offset 命名 。 下图为 index 文件和 log 文件的结构示意图: 本文插图
“.index” 文件存储大量的索引信息 , “.log” 文件存储大量的数据 , 索引文件中的元数据指向对应数据文件中 Message 的物理偏移量 。
生产者
分区策略
分区原因:
- 方便在集群中扩展 , 每个 Partition 可以通过调整以适应它所在的机器 , 而一个 Topic 又可以有多个 Partition 组成 , 因此可以以 Partition 为单位读写了 。
- 可以提高并发 , 因此可以以 Partition 为单位读写了 。
该对象需要指定一些参数:
- topic:string 类型 , NotNull 。
- partition:int 类型 , 可选 。
- timestamp:long 类型 , 可选 。
- key:string 类型 , 可选 。
- value:string 类型 , 可选 。
- headers:array 类型 , Nullable 。
②没有指明 Partition 但有 Key 的情况下 , 将 Key 的 Hash 值与分区数取余得到 Partition 值 。
③既没有 Partition 有没有 Key 的情况下 , 第一次调用时随机生成一个整数(后面每次调用都在这个整数上自增) , 将这个值与可用的分区数取余 , 得到 Partition 值 , 也就是常说的 Round-Robin 轮询算法 。
推荐阅读
- [请叫我绅士]就上山去找大师问,随后恍然大悟,开心笑话:一位青年找不到工作
- 『烨然聊科技』走上人生巅峰后,现生活怎么样了?,支付宝大爷因名字成网红
- 『专场』没找到工作?广东为期100天的网络招聘会来了
- 云安全联盟区块链安全工作组启动,e签宝助力推动区块链安全发展
- 『悠萌影视』月薪大概多少?内部员工工资揭秘,研究生和本科生到国家电网工作
- 『砍柴网』有道翻译官推出检疫特别版 助力全国百万公安民警跨境检疫工作
- [西北信息报社]陕西出台《决定》加强检察公益诉讼工作
- 重组后第一份年报出炉 TCL科技如何“提质增效”
- 『抓好』一起为大地添绿(统筹抓好改革发展稳定各项工作)
- 【三江源国家】青海自然保护地体系示范省建设工作取得积极进展
