当前位置: 首页 > article >正文

Kafka优势剖析-分布式架构

目录

1. Broker(代理/服务器)

1.1 什么是 Broker?

1.2 Broker 的特点

1.3 Broker 的扩展性

2. Topic(主题)与 Partition(分区)

2.1 什么是 Topic?

2.2 什么是 Partition?

2.3 Partition 的特点

2.4 Partition 的分配策略

3. Replication(副本机制)

3.1 什么是 Replica?

3.2 Leader 和 Follower

3.3 ISR(In-Sync Replicas)

3.4 副本的同步机制

3.5 副本的故障恢复

4. Consumer Group(消费者组)

4.1 什么是 Consumer Group?

4.2 消费者组的工作原理

4.3 消费者组的优势

5. ZooKeeper 与 KRaft 模式

5.1 ZooKeeper

5.2 KRaft 模式

 

Kafka 是一个高度可扩展的分布式消息系统,其分布式架构设计使得它能够处理大规模、高吞吐量的消息传递,并且具备高可用性和容错性。Kafka 的分布式架构主要由以下几个关键组件和机制构成:


1. Broker(代理/服务器)

1.1 什么是 Broker?

  • 定义:Broker 是 Kafka 集群中的一个节点,负责接收生产者发送的消息并将其持久化到磁盘,同时为消费者提供消息拉取服务。

  • 功能:

    • 消息存储:每个 broker 负责存储一部分主题(Topic)的分区(Partition),并将消息持久化到磁盘。

    • 消息分发:broker 将消息分发给订阅了相应主题的消费者。

    • 元数据管理:在传统模式下,broker 依赖 ZooKeeper 来管理集群的元数据;而在 KRaft 模式下,broker 自身通过 Raft 共识算法来管理元数据。

1.2 Broker 的特点

  • 无状态:每个 broker 只负责存储和处理自己负责的分区,不依赖于其他 broker 的状态。这种设计使得 Kafka 可以轻松地进行水平扩展。

  • 独立工作:每个 broker 可以独立处理请求,即使其他 broker 发生故障,也不会影响该 broker 的正常工作。

  • 负载均衡:Kafka 会根据消费者的数量和分区的数量自动进行负载均衡,确保每个 broker 的负载均匀分布。

1.3 Broker 的扩展性

  • 水平扩展:随着业务的增长,您可以轻松地添加更多的 broker 来增加系统的处理能力。每个新加入的 broker 会自动接管一部分分区,从而分担现有 broker 的负载。

  • 自动故障转移:当某个 broker 发生故障时,Kafka 会自动将该 broker 上的分区副本重新分配给其他活跃的 broker,确保消息的持续可用性。


2. Topic(主题)与 Partition(分区)

2.1 什么是 Topic?

  • 定义:Topic 是 Kafka 中消息的分类或馈送名称。生产者将消息发布到特定的主题中,消费者订阅这些主题来消费消息。

  • 作用:Topic 用于对不同类型的消息进行分类,方便生产者和消费者进行消息的生产和消费。

2.2 什么是 Partition?

  • 定义:每个 Topic 可以被划分为多个 Partition,每个 Partition 是一个有序的日志文件。Partition 是 Kafka 中最小的并行单元,所有消息都会按顺序追加到 Partition 的末尾。

  • 作用:

    • 并行化:通过将 Topic 划分为多个 Partition,Kafka 可以实现并行化的消息生产和消费。生产者可以将消息发送到不同的 Partition,消费者可以从不同的 Partition 并行消费消息,从而提高系统的吞吐量。

    • 持久化:每个 Partition 是一个独立的日志文件,消息会按顺序追加到该文件中并持久化到磁盘。这种设计确保了消息的可靠性和持久性。

2.3 Partition 的特点

  • 有序性:每个 Partition 内的消息是严格有序的,保证了消息的顺序性。这对于某些需要保证消息顺序的应用场景非常重要。

  • 不可变性:一旦消息被写入 Partition,就不能再修改或删除。这种设计确保了消息的不可篡改性。

  • 复制机制:每个 Partition 可以有多个副本(Replica),分布在不同的 broker 上。副本机制提供了高可用性和容错性,确保即使某个 broker 故障,消息也不会丢失。

2.4 Partition 的分配策略

  • 生产者端:生产者可以通过指定消息的键(Key)来决定消息应该发送到哪个 Partition。Kafka 会根据键的哈希值选择 Partition,确保相同键的消息总是被发送到同一个 Partition。如果消息没有键,Kafka 会使用轮询或粘性分区器将消息均匀分布到所有 Partition。

  • 消费者端:Kafka 会根据消费者的数量和 Partition 的数量自动将 Partition 分配给不同的消费者。每个 Partition 只会被一个消费者消费,确保消息不会被重复消费。


3. Replication(副本机制)

3.1 什么是 Replica?

  • 定义:每个 Partition 可以有多个副本(Replica),分布在不同的 broker 上。副本机制用于确保消息的高可用性和容错性。

  • 作用:副本机制确保即使某个 broker 发生故障,消息仍然可以在其他 broker 上找到,从而避免消息丢失。

3.2 Leader 和 Follower

  • Leader:每个 Partition 只有一个 Leader 副本,负责处理所有的读写请求。生产者将消息发送到 Leader 副本,消费者从 Leader 副本拉取消息。

  • Follower:每个 Partition 还可以有多个 Follower 副本,它们从 Leader 副本同步数据。Follower 副本只负责从 Leader 副本复制数据,不直接处理读写请求。

3.3 ISR(In-Sync Replicas)

  • 定义:ISR 是一个包含所有同步副本的列表,表示当前与 Leader 副本保持同步的副本集合。

  • 作用:ISR 确保只有那些与 Leader 副本保持同步的副本才能参与选举新的 Leader。当 Leader 副本发生故障时,Kafka 会从 ISR 列表中选择一个新的 Leader,确保消息的持续可用性。

3.4 副本的同步机制

  • 批量同步:Follower 副本会定期从 Leader 副本批量拉取数据,减少网络开销和 I/O 操作的频率。

  • 异步复制:Follower 副本的复制是异步的,即 Leader 副本不需要等待所有 Follower 副本都同步完成才返回确认。这种方式提高了系统的吞吐量,但也可能导致某些 Follower 副本落后于 Leader 副本。

3.5 副本的故障恢复

  • Leader 选举:当 Leader 副本发生故障时,Kafka 会从 ISR 列表中选择一个新的 Leader。这个过程是自动的,确保了系统的高可用性。

  • Follower 恢复:当某个 Follower 副本落后于 Leader 副本时,Kafka 会尝试将其重新同步到 Leader 副本。如果 Follower 副本长时间无法同步,它可能会被移出 ISR 列表。


4. Consumer Group(消费者组)

4.1 什么是 Consumer Group?

  • 定义:Consumer Group 是一组消费者,它们共同订阅同一个 Topic,并且每个 Partition 只会被组内的一个消费者消费。消费者组用于实现消息的并行消费和负载均衡。

  • 作用:通过消费者组,Kafka 可以将消息分发给多个消费者,确保每个消息只被组内的一个消费者消费。这种方式不仅提高了消费的吞吐量,还确保了消息不会被重复消费。

4.2 消费者组的工作原理

  • 分区分配:Kafka 会根据消费者的数量和 Partition 的数量自动将 Partition 分配给不同的消费者。每个 Partition 只会被一个消费者消费,确保消息不会被重复消费。

  • 负载均衡:Kafka 会根据消费者的加入和离开情况动态调整 Partition 的分配,确保每个消费者的负载均匀分布。

  • 偏移量管理:每个消费者组会维护自己的偏移量(Offset),记录已经消费到的消息位置。消费者可以根据偏移量从上次中断的地方继续消费消息,确保消息不会丢失。

4.3 消费者组的优势

  • 并行消费:通过消费者组,Kafka 可以将消息分发给多个消费者,实现并行化的消息消费,从而提高消费的吞吐量。

  • 负载均衡:Kafka 会根据消费者的数量和 Partition 的数量自动进行负载均衡,确保每个消费者的负载均匀分布。

  • 容错性:如果某个消费者宕机,Kafka 会自动将该消费者负责的 Partition 重新分配给其他活跃的消费者,确保消息的持续消费。


5. ZooKeeper 与 KRaft 模式

5.1 ZooKeeper

  • 作用:在传统的 Kafka 部署中,ZooKeeper 负责管理 Kafka 集群的元数据,包括主题、分区、副本等信息。ZooKeeper 还用于协调 broker 之间的通信,处理故障转移等任务。

  • 局限性:虽然 ZooKeeper 在早期版本中是 Kafka 的核心组件,但它增加了系统的复杂性,并且在某些情况下可能成为性能瓶颈。

5.2 KRaft 模式

  • 定义:KRaft 模式是 Kafka 3.0 引入的一种新的元数据管理机制,基于 Raft 共识算法。KRaft 模式允许 Kafka 在没有外部依赖的情况下独立运行,简化了部署和管理。

  • 优势:

    • 简化部署:不再需要单独部署和管理 ZooKeeper 集群,减少了运维复杂度。

    • 更好的性能:KRaft 模式下的 Kafka 可以提供更高效的元数据管理和更快

 


http://www.kler.cn/a/464371.html

相关文章:

  • 使用python调用翻译大模型实现本地翻译【exe客户端版】
  • 通义千问API KEY操作指南
  • 简易Type-C拉取5V/3A电流电路分享
  • 个人交友系统|Java|SSM|JSP|
  • C语言渗透和好网站
  • C++ —— 智能指针
  • 迅为RK3568开发板编译Android12源码包-设置屏幕配置
  • [人工智能] 结合最新技术:Transformer、CLIP与边缘计算在提高人脸识别准确率中的应用
  • halcon中的BLOB与灰度直方图的分析与理解
  • 华为iotda sdk发送消息无法更新quickstartpython问题解决
  • 丢弃法hhhh
  • python中subprocess指定用户与传递环境变量
  • 【重庆】《政务数字化应用费用测算规范》(T/CDCIDA 001—2023)-省市费用标准解读系列36
  • 单片机的存储器类型
  • DC-DC 降压转换器设计提示和技巧
  • Echart实现3D饼图示例
  • 【DSP/matlab】fftshift 是什么意思?在信号处理中有什么作用?
  • C#编写的盘符图标修改器 - 开源研究系列文章
  • STM32CUBEIDE FreeRTOS操作教程(十二):std dynamic memory 标准动态内存
  • 电子应用设计方案82:智能 AI 椅子系统设计
  • 软件工程期末复习汇总
  • 小程序组件 —— 24 组件案例 - 绘制公司信息区域
  • 矩阵简单问题(Java)
  • python小项目:给复制出来的段落前添加星号
  • UML统一建模语言测试题汇总
  • 【问题解决】ogr.GetDriverByName(‘ESRI Shapefile‘),driver输出路径命名问题