初识Kafka

1 什么是Apache Kafka

图片

参考链接:https://kafka.apache.org/intro

翻译一下,Apache Kafka是一个事件流平台,其全部功能以分布式、高扩展,可伸缩,容错,安全的方式提供,可部署在普通硬件、虚拟机、容器或者私有云上。主要包括三层意思:

  • 发布订阅事件流

  • 持久、可信的事件流存储

  • 及时或后置事件流处理

实际上,Kafka有个核心功能广为人知,即作为企业级消息引擎(Message Bus)。


2 Kafka的基本架构

图片

4台服务器,一个topic,3个副本的逻辑结构图

topic

消息类别,Kafka按照topic来对消息进行逻辑分类

partition

topic的分区,消息实际是保存在分区上,一个topic可以包含多个分区,分区之间的消息互不干扰,独立读写,这是Kafka高并发,高吞吐的原因之一。

**partition的物理结构
**

图片

partition物理结构图

  • 每个分区在文件系统分段(segment)存储,分段的标准是log文件大小不超过1GB

  • index文件以log文件中第一条消息的offset命名,log文件与index文件同名

  • index是稀疏索引文件,存储的是消息offset和相应的log文件偏移位置,log存储具体消息

  • offset=6的消息查找过程

  1. 通过index文件名二分查找定位00000000000000000000.index

  2. 二分查找定位小于等于6的索引位置<4, 3541>

  3. 读取00000000000000000000.log文件,偏移到位置3541

  4. 利用消息头部长度标识,顺序偏移至第6条消息

offset

对于Kafka中的分区而言,分区中的每条消息都有一个offset,表示消息在分区中的位置,代表消息的唯一序号。

replica

每个partition数据包含1到N个replication,称为分区副本,一个分区对应的副本分布在不同的broker节点上

HW/LEO

图片

  • Log Start Offset

    起始位移,副本中第一条消息的offset,如上图,起始位移是0

  • HW

  • 副本的高水印值,消费者只能消费offset<HW之前的数据,因为offset>=HW的数据对于消费者来说是不可见的

  • HW=ISR全部的分区副本中最低LEO

  • 如上图所示,HW值为5,代表offset为[0,4]区间的5条消息对消费者可见的,可以被消费;而[5,7]这3条消息对消费者是不可见的,HW最多达到LEO值,这时可消费的消息范围是[0,7]

  • LEO(Log End Offset)

    末端位移,代表日志文件中下一条待写入消息的offset

副本HW更新图

图片

消息写入leader副本

图片

follower拉取数据过程中,follower1拉取完毕,follower未完成

图片

ISR中全部follower完成同步

ISR

分区中的所有副本统称为AR(Assigned Repllicas)。所有与leader副本保持一定程度同步的副本(包括leader)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集。与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR(Out-Sync Relipcas),AR=ISR+OSR

只有处于 ISR 集合中的副本才有资格被选举为副本leader,一条 Kafka 消息,只有被 ISR 中的副本都接收到,才被视为已同步状态。

Kafka判断ISR中的follower和leader同步的依据是follower副本最近一次同步后,不同步消息的最大时间值(0.9.0.0以后)。如果follower落后leader超过阀值,则认为他失效了,会踢出ISR集合

**消费组
**

消费组是kafka提供的可扩展且具有容错性的消费者机制。组内可以有一个或者多个消费者或消费者实例,它们共享一个公共的组ID。组内的所有消费者一起协调消费topic的所有分区。但是每个分区只能由同一个消费组内的一个消费者来消费

下篇文章将介绍Kafka相关的几个重要部分,如ACK机制、控制器和副本leader的选举、与RabbitMQ的选择问题等内容。

posted @ 2022-04-25 14:57  萧小满  阅读(50)  评论(0)    收藏  举报