没有合适的资源?快使用搜索试试~ 我知道了~
Beatles9527#StudyNotes#_4Kafka架构深入1
需积分: 0 0 下载量 158 浏览量
2022-07-25
14:35:33
上传
评论
收藏 9KB MD 举报
温馨提示
试读
2.1 分区策略 2.1.1 分区原因 2.1.2 分区的原则 2.2 数据可靠性保证 2.2.1 如何保证数据可靠性 2.3.2 何时发送ACK 2.2.3
资源推荐
资源详情
资源评论
# Kafka架构深入
## 一. Kafka工作流程及文件存储机制
![](../images/4.png)
Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。
topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,且每条数据都有自己的offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个offset,以便出错恢复时,从上次的位置继续消费。
![](../images/5.png)
由于生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment对应两个文件——“.index”文件和“.log”文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号。例如,first这个topic有三个分区,则其对应的文件夹为first-0,first-1,first-2。
```txt
00000000000000000000.index
00000000000000000000.log
00000000000000170410.index
00000000000000170410.log
00000000000000239430.index
00000000000000239430.log
```
index和log文件以当前segment的第一条消息的offset命名。下图为index文件和log文件的结构示意图。
![](../images/6.png)
“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中message的物理偏移地址。
## 二. 生产者
### 2.1 分区策略
#### 2.1.1 分区原因
(1)**方便在集群中扩展**,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了。
(2)**可以提高并发**,因为可以以Partition为单位读写了。
#### 2.1.2 分区的原则
我们需要将producer发送的数据封装成一个`ProducerRecord`对象。
![](../images/7.png)
(1)指明 partition 的情况下,直接将指明的值直接作为 partiton 值;
(2)没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值;
(3)既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition 值,也就是常说的 round-robin 算法。
### 2.2 数据可靠性保证
#### 2.2.1 如何保证数据可靠性
**为保证producer发送的数据,能可靠的发送�
点击阅读更多
资源评论
茶啊冲的小男孩
- 粉丝: 25
- 资源: 326
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功