1、broker的概念
kafka中的broker类似于k8s中pod的概念,是kafka server的最小单位,这种分布式集群架构的应用中往往会忽略物理主机的概念,取而代之的就是集群的逻辑主机,在逻辑上可以把他们视作一台机器。
2、topic的概念
kafka消息处理以topic为单位,即消息的生产者和消费者原则上只需要协调一个消息主题,kafka就会负责将消息传达到对方。topic是一个逻辑上的概念,用户可以指定topic的副本数,以满足并发访问的需求。一般来说同一个topic的副本会被调度到不同的broker上,以满足负载均衡和容灾的需求。
3、partition的概念
partition是kafka中一个重要的概念,在一个topic中,又分为多个分区即partition。在逻辑上一个partition对应一个时序保证队列,保证消费者从一个partition中读取的消息是有序的,而不同的partition的消息kafka不保证消费的顺序,这进一步增加了消费者读取消息的并发能力,同时,生产者可以在push消息的时候可以指定push到那个partition,也就是说,消息的时序关系由生产者这边保证;在物理上,一个partition对应一个文件夹。
topic的副本使得不同的消费者消费同一个topic并发进行,partition的副本使得同一个消费者消费时序无关的消息时可以并发进行。
同时在多个partition副本中,会选举出一个leader,leader负责写入生产者产生的消息,然后将消息副本发送给followers。并且不同partition的leader通常会被均匀分布到多个broker上,生产者写数据的负载均衡。
4、segment的概念
segment的作用是将一个partition切分,以适应硬盘存储的特点,如果一个文件过大可能会跨越磁盘扇区进行存储,二两个扇区存储一个segment这可能会导致多次的磁盘IO增大开销,不利于kafka利用磁盘连续读取的特点。故一个segment大小最好适应一个磁盘扇区的大小。segment除了数据文件还维护了一个索引文件,记录了每个消息的偏移量。
磁盘连续读取的速度高于内存的随机读取,这是kafka高效的原理之一。
5、consumer的group概念
同一个group的消费者监听同一个topic的消息,一个group的消费者数量与一个topic下partition的数量是对应的,一个topic中的消息只会被同group中的一个消费者消费,这种应用场景与微服务的弹缩不谋而合,微服务弹缩作为同一个group的消费者只会消费一个消息一次,这在消费者层面上进一步实现了消息处理的并发性。