Java程序员面试必备——kafka的专业术语

主题 + 客户端

  1. 发布订阅的对象是主题(Topic)架构

  2. 向主题发布消息的客户端应用程序称为生产者(Producer),生产者能够持续不断地向多个主题发送消息性能

  3. 订阅这些主题消息的客户端应用程序称为消费者(Consumer),消费者可以同时订阅多个主题的消息学习

  4. 生产者和消费者统称为客户端线程

服务端

  1. Kafka的服务端由被称为Broker的服务进程构成,一个Kafka集群由多个Broker组成日志

  2. Broker负责接收和处理客户端发送过来的请求,以及对消息进行持久化对象

  3. 多个Broker进程可以运行在同一台机器上,但更常见的作法是将不一样的Broker分散运行在不一样的机器上blog

  • 这样若是集群中某一台机器宕机了,即便在它上面运行的全部Broker进程都挂掉了
  • 其余机器上的Broker也依然可以对外提供服务,这是Kafka提供高可用的手段之一

备份

  1. 实现高可用的另外一个手段是备份机制(Replication)进程

  2. 备份:把相同的数据拷贝到多台机器上,这些相同的数据拷贝在Kafka中被称为副本(Replica)同步

  3. 副本的数量是能够配置的,Kafka定义了两类副本:领导者副本(Leader Replica)和追随者副本(Follower Replica)it

  • 领导者副本:对外提供服务,对外指的是与客户端程序进行交互
  • 生产者老是向领导者副本写消息
  • 消费者老是从领导者副本读消息
  • 追随者副本:被动地追随领导者副本,不能与外界交互
  • 向领导者副本发送请求,请求领导者副本把最新生产的消息发给它,进而与领导者副本保持同步
  • MySQL的从库是能够处理读请求的
  • Master-Slave => Leader-Follower
  1. 副本机制能够保证数据的持久化或者消息不丢失,但没有解决伸缩性(Scalability)的问题
  • 若是领导者副本积累了太多的数据以致于单台Broker机器没法容纳,该如何处理?
  • 能够把数据分割成多份,而后保存在不一样的Broker上,这种机制就是分区(Partitioning)
  • MongoDB、Elasticsearch – Sharding
  • HBase – Region

分区

  1. Kafka中的分区机制是将每一个主题划分红多个分区(Partition),每一个分区是一组有序的消息日志

  2. 生产者生产的每条消息只会被发送到一个分区中,Kafka的分区编号是从0开始的

  3. 副本是在分区这个层级定义的,每一个分区下能够配置N个副本,只能有1个领导者副本和N-1个追随者副本

  4. 生产者向分区(分区的领导者副本)写入消息,每条消息在分区中的位置由位移(Offset)来表征,而分区位移老是从0开始

  5. 三层消息架构

  • 第一层是主题层,每一个主题能够配置M个分区,而每一个分区又能够配置N个副本
  • 第二层是分区
  • 每一个分区的N个副本中只能有1个领导者副本,对外提供服务
  • 其余N-1个副本是追随者副本,只能提供数据冗余
  • 第三层是消息层,分区中包含若干条消息,每条消息的位移从0开始,依次递增
  • 最后,客户端程序只能与分区的领导者副本进行交互

持久化

  1. Kafka使用消息日志(Log)来保存数据,一个日志是磁盘上一个只能追加写(Append-Only)消息的物理文件
  • 只能追加写入,避免了缓慢的随机IO操做,改成性能较好的顺序IO操做,这是实现Kafka高吞吐量的一个重要手段
  1. Kafka须要按期删除消息以回收磁盘空间,能够经过日志片断(Log Segment)机制来实现
  • 在Kafka底层,一个日志又被细分红多个日志段,消息被追加到当前最新的日志段
  • 当写满一个日志段后,Kafka会自动切分出一个新的日志段,并将老的日志段封存起来
  • Kafka在后台有定时任务按期地检查这些老的日志段是否可以被删除,从而实现回收磁盘空间的目的

消费者

  1. 点对点模型(Peer to Peer,P2P):同一条消息只能被下游的一个消费者消费,其余消费者不能染指

  2. Kafka经过消费者组(Consumer Group)来实现P2P模型

  • 消费者组:多个消费者实例共同组成一个组来消费一组主题
  • 这组主题中的每一个分区都只会被组内的一个消费者实例消费,其余消费者实例不能消费它
  • 消费者对分区有全部权
  1. 引入消费者组的目的:提升消费者端的吞吐量(TPS)

  2. 消费者实例(Consumer Instance):便可以是运行消费者应用的进,也能够是一个线程

  3. 重平衡(Rebalance)

  • 若组内的某个实例挂了,Kafka可以自动检测到,而后把这个挂掉的实例以前负责的分区转移给组内其余存活的消费者
  • 重平衡引起的消费者问题不少,目前不少重平衡的Bug社区都无力解决
  1. 消费者位移(Consumer Offset):记录消费者当前消费到了分区的哪一个位置,随时变化
  • 分区位移:表征的是消息在分区内的位置,一旦消息被成功写入到一个分区上,消息的分区位移就固定

小结

  1. 消息(Record):消息是Kafka处理的主要对象

  2. 主题(Topic):主题是承载消息的逻辑容器,实际使用中多用来区分具体的业务

  3. 分区(Partition):一个有序不变的消息序列,每一个主题下有多个分区

  4. 消息位移(Offset):也叫分区位移,表示一条消息在分区中的位置,是一个单调递增且不变的值

  5. 副本(Replica)

  • Kafka中同一条消息可以被拷贝到多个地方以提供数据冗余
  • 副本分为领导者副本和追随者副本,副本在分区的层级下,每一个分区可配置多个副本实现高可用
  1. 生产者(Producer):向主题发布消息的应用程序

  2. 消费者(Consumer):从主题订阅消息的应用程序

  3. 消费者位移(Consumer Offset):表征消费者的消费进度,每一个消费者都有本身的消费者位移

  4. 消费者组(Consumer Group):多个消费者实例共同组成一个组,同时消费多个分区以实现高吞吐

  5. 重平衡(Rebalance)

  • 消费者组内某个消费者实例挂掉后,其余消费者实例自动从新分配订阅分区的过程
  • 重平衡是Kafka消费者端实现高可用的重要手段

写在最后

  • 第一:看完点赞,感谢您的承认;
  • ...
  • 第二:随手转发,分享知识,让更多人学习到;
  • ...
  • 第三:记得点关注,天天更新的!!!
  • ...

相关文章
相关标签/搜索