Kafka | 青训营笔记

48 阅读3分钟

整体架构

  • 消息系统 Kafka是一个分布式的、支持分区的、多副本的消息系统,其和传统的消息中间件一样都具备系统解耦、冗余存储、流量削峰、扩展、缓冲等功能,此外,Kafka还支持消息顺序性保障以及 回溯消费 的功能。

  • 存储系统 在存储方面,Kafka还具有消息持久化功能和多副本机制。将消息持久化到磁盘,有效降低数据丢失的风险。因此,通过将对应数据的保留策略设置为“永久”或启用主题的日志压缩功能即可将Kafka作为长期的数据存储系统使用。

  • 流式处理平台 Kafka提供了一个完整的流式处理平台,完成窗口、变换、连接和聚合等各类操作,为消息的流式处理框架提供可靠的数据来源。

image.png

1、Broker 服务代理节点,可看作一个独立的服务节点或服务实例,负责将收到的消息存储到磁盘

2、Producer 消息和数据的生产者,可以理解为往 Kafka 发消息的客户端

3、Consumer 消息和数据的消费者,可以理解为从 Kafka 取消息的客户端

基本概念

  • 主题(Topic):Topic是Kafka系统中最大的消息分类单位,生产者根据所属业务将不同消息指定到不同主题。

  • 分区(Partition):主题的细分,一个分区只属于一个主题,每个分区包含的消息不同。Kafka通过offset作为标识消息的唯一ID,以保证其在分区中的顺序性。(PS:因此,有序的实际是分区,而主题间不存在有序一说)

image.png

工作机制

消费组和消费者机制

  • 每个消费者属于唯一的一个消费组
  • 两个消费组之间互不影响,但每个分区只会被分配给同一消费组中的一个消费者
  • 消息投递给每个订阅其的消费组中的一个消费者
  • 根据消费者分区分配策略,增加消费组中的消费者可提升其消费能力(一定时间内可处理的消息)

存储视图

Kafka的存储视图分为上层的抽象视图:主题和分区,以及实际的物理存储视图(即副本和日志层面)。为了防止 Log 过大, Kafka 又引入了日志分段(LogSegment)的概念,将 Log 切分为多个 LogSegment,相当于一个巨型文件被平均分配为多个相对较小的文件,这样也便于消息的维护和清理。Log在实际物理存储上以文件形式存储,如下图所示。

image.png

多副本机制

Kafka在分区中引入多副本机制(Replica),在同一分区的不同副本中保存相同消息,但副本之间并非完全一样,副本之间保持一主多从的关系(副本分为leader和follwer两个角色,leader负责处理读写请求,follwer与 leader 副本的消息同步)。需要注意,不同的副本应当存在不同的Broker中,当某个leader副本故障时,将从剩下的follow中选择新的leader副本负责对外服务。多副本机制为Kafka提升了容灾能力,实现了故障的自动转移。