写点什么

Kafka 的体系结构

  • 2022 年 5 月 16 日
  • 本文字数:1504 字

    阅读完需:约 5 分钟

[](()功能


=============================================================


消息系统:系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性、消息顺序型保障、回溯消费。


存储系统:消息持久化到磁盘,多副本机制。即可把 Kafka 作为长期的数据存储系统来使用。


流式处理平台:有一个完整的流式处理类库。(窗口、连接、变换和聚合)。


?


[](()体系结构


===============================================================


一个典型的 Kafka 体系结构包括若干 Producer、若干 Broker、若干 Consumer,以及一个 ZooKeeper 集群。如下图:



对于图中出现的概念我们进行一下解释:


  • ZooKeeper:是 Kafka 用来负责集群元数据的管理、控制器的选举等操作的。

  • Producer:将消息发送到 Broker

  • 生产者,发送消息的一方。负责创建消息,然后将其投递到 Kafka 中。

  • Broker:负责将收到的消息存储到磁盘中

  • 服务代理节点。对于 Kafka 而言,Broker 可以简单地看作一个独立的 Kafka 服务节点或 Kafka 服务实例。大多数情况下也可以将 Broker 看作一台 Kafka 服务器,前提是这台服务器上只部署了一个 Kafka 实例。一个或多个 Broker 组成了一个 Kafka 集群。

  • Consumer:负责从 Broker 订阅并消费消息。

  • 消费者,接收消息的一方。消费者连接到 Kafka 上接收消息,进而进行相应的业务逻辑处理。


[](()主题和分区


================================================================


  • 主题(Topic):

  • Kafka 中的消息以主题为单位进行归类。

  • 生产者负责将消息发送到特定的主题,而消费者负责订阅主题进行消费。

  • 分区(Partition)

  • 主题是一个逻辑上的概念,主题可以细分为多个分区,一个分区只属于单个主题。

  • 同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看做一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。

  • offset 是消息在分区中的唯一标识,kafka 通过它来保证消息在分区内的顺序性。Kafka 保证的是分区有序而不是主题有序。


?


[](()主题和分区的关系




如下图。主题中有 4 个分区,消息被顺序追加到每个分区日志文件的尾部。Kafka 中的分区可以分布在不同的服务器(broker)上,一个主题(topic)可以横跨多个 broker,以此来提供比单个 broker 更强大的性能。



每一条消息被发送到 broker 之前,会根据分区规则选择存储到哪个具体的分区。如果分区规则设定的合理,所有的消息都可以均匀地分配到不同的分区中。如果一个主题只对应一个文件,那么这个文件所在的机器 I/O 将会成为这个主题的性能瓶颈,而分区解决了这个问题。在创建主题的时候可以通过指定的参数来设置分区的个数,当然也可以在主题创建完成之后去修改分区的数量,通过增加分区的数量可以实现水平扩 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 展。


?


[](()分区的多副本(Replica)机制




通过增加副本数量可以提升容灾能力。


同一分区的不同副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样),副本之间是"一主多从"的关系,其中 leader 副本负责处理读写请求,foller 副本只负责与 leader 副本的消息同步。副本处于不同的 broker 中,当 leader 副本出现故障时,从 follower 副本中重新选举新的 leader 副本对外提供服务。Kafka 通过多副本机制实现了故障的自动转移,当 Kafka 集群中某个 broker 失效时仍然能保证服务可用。


?


如图, Kafka 集群中有 4 个 broker ,某个主题中有 3 个分区,且副本因子(即副本个数〉也为 3 ,如此每个分区便有 1 个 leader 副本和 2 个 follower 副本。生产者和消费者只与 leader 副本进行交互,而 follow 副本只负责消息的同步,很多时候 follower 副本中的消息相对 leader 副本而言会有一定的滞后。

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Kafka的体系结构_Java_爱好编程进阶_InfoQ写作社区