四、Kafka 工作流程及文件存储机制

1.1、工作流程

kafka整体工作流程图:
在这里插入图片描述

通过这张图可以看出消费者消费生产者产生的消息,消费者有消费者组的概念,消息属于某一个主题topic,并且消息在产生的时候会进行消息的分区存放可以搭建集群,不同分区隶属于不同的节点。一个主题的某一个分区不会放在同一个节点,这是为了防止消息随着服务器的宕机丢失

Kafka 生产端发送消息的机制是 Kafka 高吞吐的基础,生产端的基本流程如下图所示:
在这里插入图片描述
在kafka中,消息以topic进行分类:
1.指定生产者向某一个topic生产消息

./bin/kafka-console-producer.sh --broker-list CentOSA:9092,CentOSB:9092,CentOSC:9092 --topic topic01

2.定义消费者指定消费的topic和所属组

./bin/kafka-console-consumer.sh  --bootstrap-server CentOSA:9092,CentOSB:9092,CentOSC:9092 --topic topic01 --group g1 --property print.key=true --property print.value=true --property key.separator=,

topic是逻辑上的概念,partiotion是物理上的概念。每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据。(topic = N partition,partition = log)
producer生产的数据会放在log文件的末尾,每条数据都有自己的offset,消费者组中的消费者每消费一个消息,都会实时记录自己消费到了哪个offset,以便出错时恢复从上次的位置继续消费。(producer -> log with offset -> consumer(s))

1.2、文件存储机制

在这里插入图片描述
由于生产者生产的消息会不断追加到 log 文件末尾, 为防止 log 文件过大导致数据定位效率低下, Kafka 采取了分片和索引机制,将每个 partition 分为多个 segment。

每个 segment对应两个文件“.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文件的结构示意图。
index 文件和 log文件详解:
在这里插入图片描述
“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message 的物理偏移地址。

值得注意的是:.index文件是很大的,并且其中的每一条数据的大小都是一样的(如上图所示,左边存放的是消息索引值;右边对应的是消息真实的物理偏移地址,还有消息的内存大小),这样的好处是:有利于快速定位。例如上述寻找offet=3的message,先通过二分法寻找索引存放在哪个segment中,然后(假设每条数据的大小为1k),3*1k,得到索引信息,进而找到message具体的信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值