Kafka 中的几个概念

转自:https://www.cnblogs.com/mengyou0304/p/4836555.html

基本概念

下面的概念中有部分逻辑概念,部分实体概念。

Broker

物理概念,指服务于Kafka的一个node。

topic

MQ中的抽象概念,是一个消费标示。用于保证Producer以及Consumer能够通过该标示进行对接。可以理解为一种Naming方式。

partition

Topic的一个子概念,一个topic可具有多个partition,但Partition一定属于一个topic。

值得注意的是:

  • 在实现上都是以每个Partition为基本实现单元的。
  • 消费时,每个消费线程最多只能使用一个partition。
  • 一个topic中partition的数量,就是每个user group中消费该topic的最大并行度数量。

User group

为了便于实现MQ中的多播,重复消费等引入的概念。如果ConsumerA以及ConsumerB同在一个UserGroup,那么ConsumerA消费的数据ConsumerB就无法消费了。

即:所有usergroup中的consumer使用一套offset。

Offset

Offset专指Partition以及User Group而言,记录某个user group在某个partiton中当前已经消费到达的位置。

总结

Kafka使用了Topic以及Partition的概念。其中Partition隶属于Topic,即topic1可以具有多个partition。而Partition则是Consumer消费的基本单元,即topic1有几个partition,那么最多就可以有多少个consumer同时在一个User Group里消费这个topic。而Offset则是记录了UserGroup在每个partiton中的偏移值。

概念介绍:生产者,消费者,消费语义

  • 生产者

生产者直接向某topic的某partition发送数据。leader负责主备策略,写入数据,发送ack。

  • 消费者

消费者使用fetch的方式拉取数据。kafkaServer不直接负责每个consumer的当前消费到了哪里,所以需要client端和zk联合维护每个partition读到了哪里,即Offset。

所以这样看上去,kafkaServer在一定程度上更像是一个大部分为顺序读取的,基于文件的日志系统。

因为简单,所以稳定。
  • 消费语义

对比其他MQ的多播,等语义,Kafka看上去略显单薄,其主要通过User Group的概念实现消费语义。而UserGroup实际对应的就是Offset的更改策略。

User1,User2同属一个userGroup时,即表示二者共用一套Offset。因每个partition 的offset只能由一个线程维护,因此注定了每个UserGroup里只能有一个消费线程对一个partition进行消费。

同样,如果希望实现多播,那就User1和User2用两个userGroup。

猜你喜欢

转载自blog.csdn.net/Dongguabai/article/details/86523111