kafka常见术语


前言

kafka属于分布式的消息引擎系统,主要功能是提供一套完备的消息发布与订阅解决方案。

正文

  • 在kafka中,发布订阅的对象是Topic(主题),可以为每个业务、每个应用甚至每类数据都创建专属的主题。
  • 向主题发布消息的客户端称为生产者,生产者通常持续不断地向一个或多个主题发送消息。
  • 订阅主题的客户端称为消费者
  • kafka服务端由一个或多个broker进程组成。
  • 备份(Replication)是把相同的数据拷贝到多台机器上,这些相同的数据称为副本(replica)。
  • kafka定义了两类副本:领导者副本(leader replica)和追随者副本(follower replica)。前者对外提供与客户端交互的服务,后者只被动同步领导者副本的数据,不提供与客户端交互的服务。
  • 生产者总是向领导者副本写消息,消费者总是从领导者副本读消息。
  • 追随者副本总是向领导者副本发送请求,领导者把消息同步给追随者。
  • 伸缩性(Scalability),将数据分割存放到不同的broker中,这种分区机制称为分区(Partitionning)。
  • 每个主题划分成多个分区,每个分区是一组有序的消息日志。生产者生产的每条消息只会被发送到一个分区中。每个分区有N个副本,其中一个领导者副本和N-1个追随者副本。
  • 生产者向分区写入消息,每条消息在分区中的位置信息由一个叫位移(Offset)的数据来表征。分区位移总是从0开始。
  • kafka使用消息日志(Log)来保存数据,一个日志就是硬盘上一个只能追加写(Append Only)消息的物理文件。因为只能追加下,因此避免了缓慢的随机IO操作,改为性能较好的顺序写操作。
  • 一条日志被细分为多个日志段(LogSegment),消息被追加写到最新的日志段中。当写满一个日志段后,kafka自动切分出一个新的日志段,并封存老的日志段。
  • kafka在后台会定期检查老的日志段能否被删除。
  • 消费者组,指的是多个消费者实例共同组成一个组来消费一组主题。这组主题中的每个分区都只会被组内的一个消费者实例消费,其它消费者实例不能消费它。
  • 假设消费者内的一个实例挂了,kafka会自动将Failed实例之前消费的数据转移给其它活着的消费者,此机制称为“重平衡”。
  • 每个消费者在消费消息的过程中需要有字段记录它当前消费到分区的哪个位置,这个字段就是消费者位移
  • kafka不只是一个消息引擎系统,也是一个流处理平台。

参考

  • 极客时间 - kafka核心技术与实战 - 胡夕