Kafka入门学习笔记

Kafka入门学习笔记

一、常用概念

1、Producer:

生产者,发布消息。

将消息发布到指定的topic中,并负责决定发布到哪个分区。通常简单的由负载均衡机制随机选择分区,但也可以通过特定的分区函数选择分区。使用的更多的是第二种。

2、Topic:

Kafka将消息种子(Feed)分门别类, 每一类的消息称之为一个Topic。kafka的数据就保存在topic。

3、Partition:

topic的分区,每个topic可以有多个分区,分区的作用是做负载,提高kafka的吞吐量。同一个topic在不同的分区的数据是不重复的,partition的表现形式就是一个一个的文件夹。

4、Consumer:

消费者,订阅并获取消息。

5、消息模式:

通常来讲,消息模型可以分为两种, 点对点模式和发布-订阅模式。

5.1、 点对点模式:

一组消费者从服务器读取消息,一条消息只能被其中的一个消费者来pull作处理,所有消费者竞争一条消息。

Kafka入门学习笔记

 

5.2、发布-订阅模式:

消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。(类似于微信公众号)

Kafka入门学习笔记

 

6、消费者组

Kafka为这两种模型提供了单一的消费者抽象模型: 消费者组 (consumer group)。

消费者用一个消费者组名标记自己。 一个发布在Topic上的消息被分发给此消费者组中的一个消费者。

  • 假如所有的消费者都在一个组中,那么这就变成了队列模型。
  • 假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。

更通用的, 我们可以创建一些消费者组作为逻辑上的订阅者。每个组包含数目不等的消费者, 一个组内多个消费者可以用来扩展性能和容错。如图:

Kafka入门学习笔记

 

 

7、消费机制

多个消费者可以组成一个消费者组,每个消费者组都有一个groupId。同一个消费组的消费者可以消费同一topic下不同分区的数据,但是同组内多个消费者不会消费同一分区的数据!

Kafka入门学习笔记

 

图示是消费者组内的消费者小于partition数量的情况,所以会出现某个消费者消费多个partition数据的情况。多出来的消费者不消费任何partition的数据。所以在实际的应用中,建议消费者组的consumer的数量与partition的数量一致!