3.1、初识 Kafka 的逻辑结构和物理结构

·前言

如果你有了解过 ActiveMQ 你会很直接的想到 topic 和 queue,对于Kafka 而言,也有着不完全相同,但是非常类似的概念,这就是本文要介绍的内容。

·Kafka集群 逻辑结构

从逻辑结构上来说,Kafka 可以简单的分为 producer、consumer、consumer group、Kafka集群、topics 。其中生产者负责将 record 放入到 topics,消费者从 topics 中拉取消息。

在这里插入图片描述

延伸出的几个问题

Kafka 集群如果由多个 Kafka 服务组成,如何存储 topic?

在一个 Kafka集群中,producer 生产一条消息,然后推送到 某一个 topic 中,尽管集群中可能有多台机器组成,从而造成每一个 Kafka 服务中都有这个 topic,但是,一条消息只会保存到其中一个 Kafka 服务的 topic 中。
那么有人可能会问了,如果这个服务挂了怎么办,消息不就丢了吗?Kafka 支持主备模式,从服务可以备份主服务中的记录,但是不会对外提供服务,除非主服务挂了,从服务会取而代之。

一个 topic 可以被多个consumer 消费吗?

其实 Kafka 的消费者有一个消费者组的概念,同一个组内可以有多个 consumer,当然也可以只有一个consumer,以组为单位,一个topic 允许多个组进行消费,但是每一个组只允许其中一个消费者进行消费,即如果你想实现广播的功能,可以创建多个consumer组,如果只是单播,则使用一个组即可。

·Kafka 相关 物理结构

物理结构无外乎机器、存储文件这些。
在Kafka 中有这么几个概念,broker、partition、segment

broker 表示服务器

broker 表示物理的机器,比如一台或者多台服务器

partiton 表示一个文件夹

上面有说到,Kafka 集群中的每一个服务都会有一个同名的 topic,它们共同对外提供这个 topic 的存储和消费服务,而此时每一个服务上同名 topic 保存的记录总和才是这个 topic的所有的记录,那么在物理层面,这个其实被叫做 partition,每一个partition 都是一个文件夹,该文件夹内部保存具体的数据。
需要说明的是,默认一个 Kafka 服务只包含一个 partition,可以通过配置增加个数。

在这里插入图片描述

partiton 由一个或多个 segment 组成

segment 包含具体的记录数据文件和索引文件,是最小的物理存储实体。
无论是读或者写,每次都只允许操作一个 segment。

延伸思考

所以综合上面的信息来看,我们可以得到下面的对应关系。
即,一个机器可以启动多个 Kafka 服务;
一个Kafka 服务可以配置多个 partition;
一个 partition 可以包含多个 segment
在这里插入图片描述

·参考文档

[1]、https://www.cnblogs.com/likehua/p/3999538.html
[2]、《分布式消息中间件实践》

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页