kafka核心概念介绍

消息

消息由key和value构成,key的主要作用是根据一定的策略,将此消息路由到指定的分区中,这样就可以保证含同一key的消息全部写入同一分区中,可以为null。真正的有效数据都放在value。

Topic && 分区 && Log

一个Topic可以看成一个消息集合,每个topic可以有任意的生产者向其推送消息,也可以有任意个消费者消费其中的消息。每个topic可以划分成多个分区,每一条消息被分配到topic的其中一个分区中,每一个分区都有独立的offset(偏移量),该偏移量在分区中是有序的。

Broker

一个单独的kafka server就是一个broker。Broker的主要工作就是接受生产者发过来的消息,分配offset,之后保存到磁盘中.

副本

kafka对消息进行冗余备份,每个分区可以有多个副本,每个副本包含的消息时一样的。每个分区至少有一个副本。副本分为Leader副本和Follower副本,如果一个分区只有一个副本,则只有Leader副本,没有Follower副本。一般情况下,同一分区的多个副本会被分配到不同的Broker上,这样当Leader副本宕机后,可以选举出新的Leader副本来继续对外提供服务。

ISR

ISR(In-Sync Replica)集合表示的是目前可用,且消息量和Leader副本相差不多的副本,可以算作是Leader副本的一个子集。满足副本属于ISR集合必须遵循以下两个条件:

  1. 副本所在的节点必须维持着与ZooKeeper的连接。
  2. 副本的最后一条消息的offset域Leader副本最后一条消息的offset之间的差值不能超过指定阈值。

当有消息到达服务器时,首先写入Leader副本,之后Follwer副本会从Leader副本拉取消息来同步,因此Follwer副本中的消息会略少于Leader副本。如果一个副本长时间没有拉取消息或者相差的消息数量高于阈值则会被踢出ISR集合,直到相差的消息数小于阈值。

HW&LEO

HW(HighWatermark)标记了一个特殊的offset,当消费者消费消息的时候,只能拉取到HW之前的消息,HW之后的消息对于消费者来说是不可见的。当ISR集合中全部的Follower副本都拉取HW指定消息进行同步之后,Leader副本会递增HW的值。LEO(Log End Offset)是所有的副本都会有的一个offset标记,它指向追加到当前副本的最后一个消息的offset。

Cluster&Controller

多个Broker可以做成一个Cluster(集群)对外提供服务,每个Cluster会选举出一个Broker来担任Controller。

生产者

生产者生产消息到服务器

消费者

消费者从topic中拉取消息来消费,每一个消费者独立的管理自己的消费位置。

Consumer Group

多个消费者可以组成一个Consumer Group,一个Consumer只能属于一个Consumer Group。Consumer Group保证其订阅的Topic的每个分区只被分配给此Consumer Group中的一个消费者。因此,在Kafka官网介绍中,将Consumer Group称为逻辑上的消费者。

posted @ 2017-08-17 19:42  吹哔战将  阅读(490)  评论(0编辑  收藏  举报