文章目录
·前言
如果你有了解过 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]、《分布式消息中间件实践》
本文深入探讨Kafka集群的逻辑与物理结构,解释了多服务组成的集群如何存储topic,及topic如何被多个consumer消费的问题。介绍了Kafka的消费者组概念,以及broker、partition、segment的物理结构。
1896

被折叠的 条评论
为什么被折叠?



