kafka基础架构

kafka创建用户指定消费者组 kafka 消费者组建立_文件存储


1)Producer :消息生产者,就是向kafka broker发消息的客户端;

2)Consumer :消息消费者,向kafka broker取消息的客户端;

3)Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

4)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic;

6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列;

7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。

8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。

9)follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。

消费流程

kafka创建用户指定消费者组 kafka 消费者组建立_kafka_02


kafka中的消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面对topic的,topic是逻辑的概念,而partition是物理上的概念,每个partition对应一个log文件,该log文件中存储的就是producer生产的数据,producer生产的数据会不断追加到该log文件的末端,每条数据都有自己的offset。消费者组组中的每个消费者,都会根据自己的offset去拉取数据,一边出错时恢复,从上次位置开始消费数据。kafka文件存储机制

kafka创建用户指定消费者组 kafka 消费者组建立_kafka创建用户指定消费者组_03


生产者生产的消息会不断追加到log文件结尾,为防止文件过大导致数据定位效率低下,kafka采取了分片和索引机制,建给个partition分为多个segment(segment的大小默认为1g),每个segement对应两个文件“.index”和“.log”文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区号。

例如,first这个topic有三个分区,则其对应的文件夹为first-0,first-1,first-2。

00000000000000000000.index
00000000000000000000.log
00000000000000170410.index
00000000000000170410.log
00000000000000239430.index
00000000000000239430.log

所有示例

index和log文件以当前segment的第一条消息的offset命名。下图为index文件和log文件的结构示意图

kafka创建用户指定消费者组 kafka 消费者组建立_kafka_04


“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中message的物理偏移地址

寻找offset为10的数据

首先10在文件00000000000000006.index里面,将10-6+1=5 即可得到952

根据952即可得到具体存在.log的消息数据