这个专栏的目的是为了把我在使用kafka的时候所思所想记录下来,分享给大家,然后让大家可以快速了解kafka。很多时候,大家会忽略或者轻视最基础的概念,但是其实这个才是最重要的,所以我们会由kafka的基础概念开始出发。

什么是kafka

一个分布式流式处理平台,以高吞吐、可持久化、可水平扩展、支持流数据处理等特性被广泛使用。

Kafka拥有三大功能:

  1. 消息系统:作为消息中间件,可以进行系统解耦、流量削峰、缓冲、异步通信、冗余存储,具有扩展性,可恢复性;同时kafka作为消息系统还可以保证消息顺序性和回溯消费。
  2. 存储系统:相比于其他内存存储的系统,kafka把消息持久化到磁盘,拥有消息持久化功能和多副本机制。
  3. 流式处理平台:kafka为流式处理框架提供数据来源,以及完整的流式处理类库。

kafka的结构

Producer:发送message并投递到broker

Broker:负责将收到的message存储到磁盘,一般一个broker就是一个实例或者一台kafka服务器

Consumer:从broker订阅并且消费message

ZooKeeper Cluster:用来负责cluster metadata的管理以及leader的选举控制等

kafka重要概念

topic:producer发送message到指定的topic(每一条message都要指定一个topic);consumer负责订阅topic进行消费(consumer通过Pull的方式拉取消息,并且保存消费的具体位置,当消费者宕机恢复后根据保存的消费位置重新拉取)

partition

  1. 一个partition只属于一个topic
  2. 一个topic可以含有多个partition,同一个topic下的不同partition里的message是不同的
  3. partition在存储层面是一个可追加的log文件,message被分配到partition即log文件时都会分配一个特定的offset--消息偏移量
  4. offset就是kafka用来保证消息顺序执行的关键。但是offset不跨区,所以kafka只能保证partition有序,topic无法保证有序
  5. 同一个topic的不同partition可以在不同的broker上,message发送到broker 前,按照partition rule选择到哪个partition,可以通过增加partition数量进行水平扩展

replica

  1. 即kafka的多副本机制
  2. 同一partition的不同replica保存相同的消息(replica之间是延时同步)
  3. replica结构是一主多从,leader replica负责读写请求(即与生产者和消费者交互),follower replica只负责和leader replica的消息同步,不同的replica被分配在不同的broker,当leader replica故障,从follower replica里面选举新leader对外提供服务,以此通过多副本机制实现故障自动转移
  4. 副本因子即副本的个数,副本会被分配在不同的broker上

AR/ISR/OSR/HW/LEO

AR:assigned replica,一个分区的所有副本

ISR:in-sync replica,在可容忍的指定的同步滞后范围内的follower replica和leader replica

OSR:out-of-sync replica,超出可容忍的同步滞后范围的folloer副本

AR=ISR+OSR

leader负责维护和跟踪ISR里的follower副本的状态,包括滞后太多踢出ISR或者跟上进度从OSR拉回ISR;leader宕机时,默认只有ISR的副本才能竞选为leader(除非改配置)

HW:high watermark--高水位,标记一个特定的offset,consumer只能拉取到这个offset之前的消息

LEO:log end offset,表示log的下一条待写入消息的offset,partition里面每个replica都会维护自己的LEO,一个partition里面的ISR里所有replica中最小的LEO就是这个partition的HW

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐