kafka介绍 (3)

  6.1、日志分区被分布在集群中的服务器之上,这些分区之下的每个服务器处理数据和请求的时候共享此分区,每个分区会被复制到其它服务器上,副本的数量可配置。

  6.2、每个分区中,有一个服务器充当"leader"的角色,有0个或者多个充当"follower"的角色。leader负责处理所有读写请求,而follower被动的从leader那里复制。如果leader死了,其中一个follower会自动成为leader。一个服务器可能是它所在的那些分区的其中一个分区的leader的同时也可能是其它分区的follower。(PS:这段话的意思是,一个分区可能有1台或者多台服务器组成,在组成个分区的服务器中有一个服务器是leader角色,其余是follower角色,leader角色负责这个分区的所有读写操作,而follower则被动的从leader那里复制数据。而且,一个服务器可能在这个分区的leader,但同时也可能是别的分区的follower。)

7、生产者

  生产者负责指定记录发布到哪个topic的哪个分区中

8、消费者

  8.1、消费者用消费者组名来标记它们自己,每个消费者分组都是topics的一个逻辑订阅者

  8.2、被发布到topics中的每一条记录会被投递到每个订阅的消费者分组中的一个消费实例

  8.3、每个消费者分组由多个消费者实例组成,而且实例的数量是可伸缩的

9、保证

同一个消费者发送的同一个topic同一个分区中的消息会按照它们发送的顺序依次追加。假设M1和M2都是由同一个分区发送的消息,而且M1先被发送,那么M1的offset必定比M2小

消费者是按照消息存储的顺序看到消息的

假设副本因子是N,那么即使有N-1个服务器挂了也不会丢失任何记录

10、kafka作为消息系统

  10.1、topics中的每条记录只会被投递到每个订阅的消费者分组中的一个消费者实例。也就是说,假设有2个消费者分组都订阅了这个topics,并且每个分组都有3个消费者实例,那么这个topics中的每条记录只会投递2份分别给这两个分组,每个分组收到这条记录以后只能由该分组中的一个消费者实例消费。

  10.2、基于第一点,那么,如果订阅这个topics的所有消费者都属于同一个分组,那么这就相当于点对点队列模型;如果订阅的所有消费者都属于不同的消费者分组,那么这就相当于是发布订阅模型。

  10.3、kafka保证同一个生产者发送到同一个topics下的同一个分区的消息的存储顺序和它们发送的顺序一致,而且消费这个分区的消费者看到消息的顺序和它们存储的顺序是一样的。

  10.4、主题下分区中并行,kafka既保证顺序又能够负载均衡。这一切都归功于指定分区到分组中的消费者,以至于每个分区只能被消费者分组中的一个消费者消费。通过这样做,就可以确保消费者只能按顺序消费数据。

11、两张很重要的图

kafka介绍

   

kafka介绍

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpfzp.html