Kafka基本概念

Kafka基本概念及术语

1 Topic

        主题。在Kafka中,使用一个类别属性来划分消息的所属类,划分消息的这个类称为topic。topic相当于消息的分类标签,是一个逻辑概念。

2 Partition

        分区。topic中的消息被分割为一个或多个partition,其是一个物理概念,对应到系统上就是一个或若干个目录。 分区本身是一个FIFO的队列,所以分区中的消息是有序的。但当topic拥有多个partition的时候,那么多个partition就不存在其顺序性。

  • 一般情况下一个topic的分区数量是broker数量的整数倍,即 partition % broker = 0
  • 一个分区只允许同一个消费者组的一个消费者消费,不允许同组多个消费者同时消费一个partition
  • 一个分区可以允许多个不同消费者组的消费者消费,每组有且只能有一个消费者消费

3 segment

        段。将partition进一步细分为了若干的segment,每个segment文件的最大大小相等;segment有三个文件组成

前面的20位数字代表offset偏移量,.index为索引文件,.log为消息内容,.timeindex为时间文件。

4 Broker

        Kafka 集群包含一个或多个服务器,每个服务器节点称为一个broker;假设某topic中具有N个分区(partition),集群中共有M个broker。则分区与broker间的关系是:

  • 若N>M且N%M=0,则每个broker会平均存储这些分区
  • 若N>M且N%M!=0,则每个broker中的分区是不平均的
  • 若N<M,则会有N台broker中具有一个分区,另外M-N台broker中是没有分区的

5 Producer

        生产者。即消息的发布者,其会将某topic的消息发布到相应的partition中。 生产者所生产的消息默认会平均分配到各个分区,但也可以直接指定要写入的分区,也可根据消息的key来计算路由。

6 Consumer

        消费者。可以从broker中读取消息。

  • 一个消费者可以消费多个topic中的消息
  • 一个消费者可以消费同一个topic中的多个partition中的消息
  • 一个分区中的消息允许多个无关的消费者(无关消费者即不在同一个消费者组Consumer Group)同时消费。

7 Consumer Group

        consumer group是kafka提供的可扩展且具有容错性的消费者机制。组内可以有多个消费者,它们共享一个公共的ID,即group ID。组内的所有消费者会协调在一起平均消费(对分区的消费是平均的,但对于消息的消费不一定是平均的)订阅主题的所有分区。

        Kafka可以保证在稳定状态下,一条消息只能被同一个consumer group中的一个consumer消费,当然,一个消息可以同时被多个consumer group消费。另外,Kafka还可以保证,在稳定状态下每一个组内consumer只会消费某一个或几个特定的partition;组中consumer数量与partition数量的对应关系如下。

     

8 Replicas of partition

        分区副本。副本是一个分区的备份,是为了防止消息丢失而创建的分区的备份。

9 Partition Leader

        每个partition有多个副本,其中有且仅有一个作为Leader,Leader是当前负责消息读写的partition。即所有读写操作只能发生于Leader分区上。

  • Leader与Follower是主备关系,不是主从关系。
  • Leader宕机后,Broker Controller会从Follower中选举出一个新的Leader;注意,这个选举不是由zk完成的。

10 Partition Follower

        所有Follower都需要从Leader同步消息,Follower与Leader始终保持消息同步。

11 ISR

        ISR,In-Sync Replicas,是指副本同步列表;ISR列表是由Leader负责维护;Assigned Replicas,AR全副本列表初始化时AR = ISR;OSR,Outof-Sync Replicas,不可用副本列表,AR = ISR + OSR。

12 offset

        偏移量。每条消息都有一个当前Partition下唯一的64字节的offset,它是相对于当前分区第一条消息的偏移量。查找具体消息消费需要通过定位偏移量来实现,例:需求查找第170213消息,通过2分法定位到partition分区中的00000000000000170210.index文件,在通过170213 - 170210 = 3,得到偏移量为3,定位到0348查找00000000000000170210.log文件,获取到m170213的这条消息。

13 Broker Controller

        Kafka集群的多个broker中,有一个会被选举为controller,负责管理整个集群中partition和replicas的状态。 例如,partition leader故障,由Controller负责从ISR中的followr中重新选举出一个新的leader,其选举算法为轮训选举。

如图,现有leader为1,isr:[1,2],当1故障后就是leader为2,如有3,那么当2故障leader即为3,恢复后列表顺位加入;

再如,当某个topic的partition数量发生变化时,由Controller负责管理partition与消费者间的分配关系,即Rebalance。

当前版本的Kafka只有Controller会向zk中注册Watcher。

早期版本的Kafka(0.8版本及之前),每一个broker及partition(所有副本)都会向zk中注册watcher。这种方式会导致Kafka的分区中出现脑裂,并且频繁更新造成zk性能下降。

14 HWLEO

        HW,HighWatermark,高水位,表示Consumer可以消费到的最高partition偏移量。HW保证了Kafka集群中消息的一致性。确切地说,是保证了partition的Follower与Leader间数据的一致性。

        LEO,Log End Offset,日志最后消息的偏移量。消息是被写入到Kafka的日志文件中的,这是当前最后一个写入的消息在Partition中的偏移量。

        对于leader新写入的消息,consumer是不能立刻消费的。leader会等待该消息被所有ISR中的partition follower同步后才会更新HW,此时消息才能被consumer消费。

15 Zookeeper

        Zookeeper负责维护和协调broker,负责Broker Controller的选举。 从Kafka 0.9版本开始,offset的管理由broker负责管理与保存,不再由zk负责管理。

总结:zk负责Broker中Controller的选举,Partioin Leader是由Controller负责选举。

16 Coordinator

        Coordinator一般指的是运行在每个broker上的group Coordinator进程,用于管理Consumer Group中的各个成员,主要用于offset位移管理和Rebalance。一个Coordinator可以同时管理多个消费者组。

17 Rebalance

        当消费者组中消费者数量发生变化,或Topic中的partition数量发生了变化时, partition的所有权会在消费者间转移,即partition会重新分配,这个过程称为再均衡Rebalance。

        再均衡能够给消费者组及broker集群带来高可用性和伸缩性,但在再均衡期间消费者是无法读取消息的,即整个broker集群有一小段时间是不可用的。因此要避免不必要的再均衡。

18 offset commit

        Consumer从partition中取出一批消息写入到buffer对其进行消费,在规定时间内消费完消息后,会自动将其消费消息的offset提交给broker,以让broker记录下哪些消息是消费过的。当然,若在时限内没有消费完毕,其是不会提交offset。

发生Rebalance后会使用到之前提交的offset。

        系统会将提交的offset作为消息写入到__consumer_offsets主题的partition中。不过需要注意,这个offset消息在写入时是有key的,其key为该offset所示消息的消费者的id。那么该offset应该放到哪个partition中呢?其会首先计算出key的hash值,然后再将此hash与50进行取模。其余数即为相应的partition编号。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值