Kafka—-入门介绍(1)

Kafka介绍

kafka是一个分布式的,基于发布/订阅的消息系统。简单的可以理解kafka是一个消息队列,可以往队列里面写入数据,也可以从队列里面取出数据进行处理。

kafka关键概念

我以自来水厂的例子来解释kafka的相关概念,可能不够严谨,只为方便大家理解。

从前有一家自来水厂(producer)负责把水运输到不同的地方,以供当地的居民(consumer)使用。冬天大家用水较少,但是水厂又一直在送水,导致水浪费了;到了夏天大家用水多,自来水来不及生产,导致居民无水可用。因此需要一个蓄水池(broker),自来水厂将水运输到蓄水池中,居民从蓄水池取水使用。蓄水池通过一个管道(topic)将水运输到不同的小区中

Topic

topic可以理解数据标签,kafka通过topic对数据进行分门别类,就好比上述例子中的管道,使得自来水可以流向不同的地方,而不导致水混在一起。

Producer

生产者,数据的来源,就好比上述例子中自来水厂,水都是从自来水来的。

Consumer

消费者,数据的处理者,就好比上述例子中的居民,居民需要取水喝。

Broker

数据保存的地方,多个broker构成一个kafka集群。就好比上述例子中的蓄水池,生成者生成的数据都保存在broker中。

Topic抽象

topic是一个大的管道,但是为了提供吞吐量,在管道中有设置了许多小的通道(partition),也就是分区。每一个分区都是一个顺序的,不可变的消息队列,并且可以持续添加。每个分区通过一个唯一的offset来标识消息处理的进度。

消费者可以控制offset,例如消费可以控制从最新的数据开始消费,即设置offset为new,也可以从最早的数据开始消费,即设置offset为early

生成者

生产者负责往某个topic写入数据。由于topic有多个分区,数据可能会按照分区的顺序写入,也可以按照某种算法写入对应的分区,这个可以有开发者自己控制。

消费者

消费者负责从topic中读取数据。kafka为消费者提供了一个抽象模型-消费组(consumer group)。消费组可以对应上述例子中小区,每一个居民都是消费者(consumer),同一个小区的居民就是属于同一个消费组。

kafka之所以抽象消费组的概念,是为了兼容两种消费模型,队列模型和发布-订阅模型。对于队列来说,一组消费者从同一个服务器消费数据,一个消息只能由一个消费者消费。在发布-订阅模型中,一个消息被广播给所有的消费者。如果所有的消费者都在一个消费组中,则变成了队列模型;如果每一个消费者都在不同的消费组中,则变成了发布-订阅模型。

在kafka中,一个分区中的消息只能被同一个消费组中一个消费者消费。例如一个topic中有三个分区p1,p2,p3。消费组groupA,只有一个消费者A1;消费者groupB,有4个消费者,B1,B2,B3,B4。则消费情况可能如下所示,

对于消费组groupA,

partition consumer
p1 A1
p2 A1
p3 A1

由于groupA只有一个consumer,所以所有的分区都由这个consumer消费

对于消费组groupB

partition consumer
p1 B1
p2 B2
p3 B3

groupB有4个consumer,但是这个topic只有3个partition,所以有一个consumer将消费不到任何数据,除非其中一个consumer挂掉了,剩下空闲的这个consumer才会上位。

一个partition的数据,只能由一个consumer group的一个consumer消费

参考文献


Reprint please specify: wbl Kafka—-入门介绍(1)

Previous
Kafka——QuickStart(2) Kafka——QuickStart(2)
安装下载源码安装下载地址 我用的kafka的版本是0.10.2.0,后续的例子都是使用这个版本 tar -zxvf kafka-0.10.2.0-src.tgz cd kafka-0.10.2.0 Mac Homebrew安装brew in
2018-12-20
Current
Kafka—-入门介绍(1) Kafka—-入门介绍(1)
Kafka介绍kafka是一个分布式的,基于发布/订阅的消息系统。简单的可以理解kafka是一个消息队列,可以往队列里面写入数据,也可以从队列里面取出数据进行处理。 kafka关键概念我以自来水厂的例子来解释kafka的相关概念,可能不够严
2018-12-16