Kafka(架构深入理论)

Kafka工作流程

下图左边是一个生产者,右边是一个消费者组,生产者于消费者面向的都是一个Topic,在Kafka中,即使我们不手动创建Topic,有生产和消费了,也会自动生成Topic,而且自动创建的这个Topic默认是一个分区,一个副本,我们这里创建的是一个Topic三个分区,对应三个副本
在这里插入图片描述
生产者给Topic发消息(数据),是怎么发的呢?一个小方块就代表一条数据,一条消息,它不是一个一个进来的,是一批一批进来的,也就是说,生产者向Kafka中的Topic输送数据,是成批次进去的。如果是一条一条的发送,那么肯定是每发送一条数据都会和Kafka建立一次连接,这不仅仅是IO的问题,还涉及到了网络传输问题,按道理讲生产者这个应用与Kafka这个集群应该不在一个节点信息上的,所以会有网络传输。成批次发送回提高效率,减少连接。
在这里插入图片描述
Leader是接收数据的,而Follower是从Leader上主动拉取同步数据。自己拉取自己Leader的数据,而消费者消费数据的时候,指挥去找Leader,不会去找Follower。
在这里插入图片描述
在这里给大家引出一个新的概念就是offset,这个offset在Kafka中非常重要,我们标记的数字都放在了独立的分区中,他们是在Kafka中真实存在的,而offset就是偏移量的意思,如果在正常的情况下,生产者生产数据向Topic中发送了,消费者这边也正常消费了,是没毛病的,但是我们考虑到一点,就是如果消费者挂了,会不会对Kafka造成影响?首先它挂了,我们肯定是要重新启动,让它再次能够进行消费的,但是它面临一个问题,从哪里开始消费呢?offset就会记录它上次消费的位置,offset就是给消费者用的,消费者每次消费完数据,都要更新一下offset,更新它的目的很简单,就是怕消费者挂了,再回来不知道从哪里消费,那么offset储存在什么地方呢?在0.8之前的Kafka,包括0.8,offset都是存储在zk中的,如果所有的消费者的offset都存储在zk中,那么对zk的压力还是有点大的,显得Kafka太过于依赖zk了,后来kafka将它的架构变了,将offset存储在自己内置的一个Topic中了,它自己的这个Topic晚点我们可以一起看一看。
在这里插入图片描述
我们思考一个问题,消费者第一次消费的时候它有offset么?那我从哪里消费呢?这就牵扯出两个策略,一,从最开始消费,二从最新的消费,Kafka默认从最新的开始消费,所以我们敲命令的时候,那个–from-beginning,代表的就是从0开始消费了。就是这个原理

Kafka文件存储机制

我们已经清楚了,生产者生产数据,回向Kafka发下哦那个数据,那么,数据会放在什么地方呢?数据会落盘的,落盘落在了什么地方呢,就落在了前面配置的data.logs中。我们是怎么存的呢?存储的文件是什么结构呢?
我们下图是一个Topic,带着三个分区,三个分区对应着三个副本,加起来就是六个副本,每一个副本都对应着我们之前配置的logs一个文件夹,他们名命是怎么名命的呢?就是Topic的名字横杠0,1,2,我们一会可以去看一下,我们log存储的就是真实存在的文件了,它这个文件是什么文件呢?是一个log文件,日志文件特点都是追加进去的,追加的好处是什么?是顺序写入

在这里插入图片描述
我们都知道机械硬盘的内部结构大概是什么样的
在这里插入图片描述
我们向磁盘写入数据都是顺序写入,当然,旁边的那个磁针是不会动的,知识磁盘在疯狂的旋转,这样写的画速度是非常快的,随机写的话效率很低,存在一个磁针寻址的时间,所以顺序写入比随机写要快的多。就好比我们读取一个大文件的时候非常快,因为是顺序读写,而读取一大堆小文件的时候是随机读写,要找地址,所以说很慢。为什么要将这个呢,因为我们生产者向Kafka发送数据写入的过程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值