Kafka基本概念和常见结构模型


Kafka入门一

基本概念

Producer

生产者,负责创建消息,将其投送到Kafka中。

Consumer

消费者,连接到kafka上并接收消息,进行相应的业务处理。

Broker

Kafka 的服务器端由被称为 Broker 的服务进程构成,即一个 Kafka 集群由多个 Broker 组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化。虽然多个 Broker 进程能够运行在同一台机器上,但更常见的做法是将不同的 Broker 分散运行在不同的机器上,这样如果集群中某一台机器宕机,即使在它上面运行的所有 Broker 进程都挂掉了,其他机器上的 Broker 也依然能够对外提供服务。这其实就是 Kafka 提供高可用的手段之一。

ZooKeeper

负责集群元数据管理,控制器的选举等操作。

img

Topic(主题)

主题是一个逻辑上的概念。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。

Partition(分区)

一个主题下可以有多个分区,一个分区只属于单个主题。分区在存储层面可以看做一个可追加的日志文件。

Offset(位移)

消息在被追加到分区日志文件的时候都会分配一个特定的偏移量。offset是消息在分区中的唯一标识,Kafka通过它来保证消息在分区内的顺序性。

不过offset并不跨越分区,即Kafka保证的是分区有序而不是主题有序。

Replica(副本)

Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。

副本还分为领导者副本(Leader Replica)和追随者副本(Follower Replica),各自有不同的角色划分。

副本是在分区层级下的,即每个分区可配置多个副本实现高可用。

副本的工作机制:生产者总是向领导者副本写消息;而消费者总是从领导者副本读消息。

至于追随者副本,它只做一件事:向领导者副本发送请求,请求领导者把最新生产的消息发给它,这样它能保持与领导者的同步。

Consumer Group(消费者组)

消费者组:消费者实例共同组成一个组来消费一组主题。这组主题中的每个分区都只会被组内的一个消费者实例消费,其他消费者实例不能消费它。

主要是为了提升消费者端的吞吐量。多个消费者实例同时消费,加速整个消费端的吞吐量(TPS)。

Consumer Offset

每个消费者在消费消息的过程中必然需要有个字段记录它当前消费到了分区的哪个位置上,这个字段就是消费者位移(Consumer Offset)。

这和上面所说的位移完全不是一个概念。上面的“位移”表征的是分区内的消息位置,是不变的,即一旦消息被成功写入到一个分区上,它的位移值就是固定的了。

而消费者位移则不同,它可能是随时变化的,毕竟它是消费者消费进度的指示器嘛。另外每个消费者有着自己的消费者位移,因此一定要区分这两类位移的区别。消息在分区中的位移称为分区位移,而把消费者端的位移称为消费者位移。

ISR

分区内所有副本被称为AR(Assigned Replicas)。所有与leader副本保持一定程度同步的副本(包括leader副本在内)组成ISRIn-Sync Replicas)。

ISR集合是AR集合的一个子集。消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内follower副本相对leader副本而言会有一定程度的滞后。

“一定程度的同步”是指可忍受的滞后范围,这个范围可以通过参数进行配置。与leader副本同步滞后过多的副本(不包括leader副本)组成OSR(Out-Of-Sync Replicas)

因此AR=ISR+OSR,正常情况下,所有的follower副本都应该与leader副本保持一定程度的同步,即AR=ISROSR集合为空。

leader副本负责维护和跟踪ISR集合中所有的follower副本的滞后状态,当follower副本落后太多或失效时,leader副本会把他从ISR集合中剔除。

如果OSR集合中有follower副本追上了leader副本,那么副本会把它从OSR集合转移至ISR集合。默认情况下,当leader副本发生故障时,只有在ISR集合中的副本才有资格被选举为新的leader,而在OSR集合中的副本则没有任何机会(但是可以通过修改相应的参数配置来改变)。


文章作者: Wendell-Z
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wendell-Z !
评论
  目录