【图文详细 】Kafka消息队列——Kafka的核心组件

版权声明:版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/qq_42246689/article/details/84948389

4.1、kafka的核心组件概述

Kafka 是 LinkedIn 用于日志处理的分布式消息队列,同时支持离线和在线日志处理。 

Kafka 对消息保存时根据 Topic 进行归类:

发送消息者就是 Producer,消息的发布描述为 Producer

消息接受者就是 Consumer,消息的订阅描述为 Consumer 每个

Kafka 实例称为 Broker,将中间的存储阵列称作 Broker(代理) 

然后三者都通过 Zookeeper 进行协调。 
 
Kafka 的大致工作模式: 

 

4.2、Kafka 拓扑结构 

4.3、Kafka 的核心概念详解 

Producer : 生产 message 发送到 topic

Consumer : 订阅 topic 消费 message,consumer 作为一个线程来消费

Consumer Group:一个 Consumer Group 包含多个 consumer,这个是预先在配置文件中配置好的

Broker:Kafka 节点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka 集群。

Topic:一类消息,消息存放的目录即主题,例如 page view 日志、click 日志等都可以以 topic 的形式存在,Kafka 集群能够同时负责多个 topic 的分发。

Partition:topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有 序的队列

Segment:partition 物理上由多个 segment 组成,每个 Segment 存着 message 信息 
4.3.1、生产者:Producer

4.3.2、Kafka 集群的存储代理:Broker 

4.3.3、消费者组:Consumer Group 

4.3.4、消费者:Consumer 

每个 Consumer 属于一个 Consumer Group

在 kafka 中:

1、 一个 Partition 的消息只会被 group 中的一个 Consumer 消费

2、 可以认为一个 group 就是一个“订阅者”

3、 一个 Topic 中的每个 Partition 只会被一个“订阅者”中的一个 Consumer 消费 

4.3.5、服务协调组件:Zookeeper 

4.3.6、Kafka 核心:Topic 和日志 

4..3.7、消息分区:Partition 

4..3.8、日志文件:Segment 详解 

1、在 Kafka 文件存储中,同一个 topic 下有多个不同 partition,每个 partition 为一个目录, partiton 命名规则为 topic 名称+有序序号,第一个 partiton 序号从 0 开始,序号最大值为 partitions 数量减 1。 
 
2、每个 partion(目录)相当于一个巨型文件被平均分配到多个大小相等 segment(段)数据文件 中。但每个段 segment file 消息数量不一定相等,这种特性方便 old segment file 快速被删除。 默认保留 7 天的数据。

3、每个 partiton 只需要支持顺序读写就行了,segment 文件生命周期由服务端配置参数决 定。(什么时候创建,什么时候删除,默认是 168 小时,也就是 7 天) 
 
4、Segment File 组成:由 2 大部分组成,分别为 index file 和 data file,此 2 个文件一一对应, 成对出现,后缀".index"和".log"分别表示为 segment 索引文件、数据文件。 

5、Segment 文件命名规则:partion 全局的第一个 segment 从 0 开始,后续每个 segment 文 件名为上一个 segment 文件最后一条消息的 offset 值。数值最大为 64 位 long 大小,19 位数字字符长度,没有数字用 0 填充。

6、索引文件存储大量元数据,数据文件存储大量消息,索引文件中元数据指向对应数据文 件中 message 的物理偏移地址。 
 
3,497:当前 log 文件中的第几条信息,存放在磁盘上的那个地方 
 
上述图中索引文件存储大量元数据,数据文件存储大量消息,索引文件中元数据指向对应数 据文件中 message 的物理偏移地址。 其中以索引文件中元数据3,497为例,依次在数据文件中表示第3个message(在全局partiton 表示第 368772 个 message)、以及该消息的物理偏移地址为 497。 
 
7、segment data file 由许多 message 组成,物理结构如下

8、查找 offset 读取 offset=368776 的 message,需要通过下面 2 个步骤查找

第一步: 00000000000000000000.index 表示最开始的文件,起始偏移量(offset)为 0 00000000000000368769.index 的消息量起始偏移量为 368770 = 368769 + 1 00000000000000737337.index 的起始偏移量为 737338=737337 + 1 其他后续文件依次类推。 以起始偏移量命名并排序这些文件,只要根据 offset **二分查找**文件列表,就可以快速定 位到具体文件。当 offset=368776 时定位到 00000000000000368769.index 和对应 log 文件。 
 
第二步: 当 offset=368776 时,依次定位到 00000000000000368769.index 的元数据物理位置和 00000000000000368769.log 的物理偏移地址 然后再通过 00000000000000368769.log 顺序查找直到 offset=368776 为止。

猜你喜欢

转载自blog.csdn.net/qq_42246689/article/details/84948389