三, Kafka Broker

什么是Broker ?
Kafka集群包含一个或多个服务器,这种服务器被称为broker.一个集群由多个Broker组成, 一个Broker可以容纳多个topic; Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉取指定Topic的消息,然后进行业务处理,broker在中间起到一个代理保存消息的中转站。

3.1 Kafka Broker 工作流程

1. Zookeeper 中存储的Kafka信息

在这里插入图片描述

推荐一个windows端的zk可视化工具, 下载地址

在这里插入图片描述

2. Kafka Broker 总体工作流程

在这里插入图片描述

  1. 每台Kafka Broker启动后, 都会向Zokeeper注册, ids的值维护启动着的Broker id, [0,1,2];
  2. 注册完毕后, Brokers抢占注册controller, 负责leader选举;
  3. 抢占注册contoller节点后, Broker中的Conroller组件监听ids结点的变化;
  4. Contoller决定leader的选举; (AR: Kafka分区中的所有副本)
  5. 选举完成后, Contoller组件将选举到的leader写入到topics的/0/state结点中, 其他broker的controller组件拉取该信息
  6. 生产者向brokers发送信息.

模拟 Kafka 上下线, Zookeeper 中数据变化

在这里插入图片描述

2.1 Broker 重要参数

在这里插入图片描述

在这里插入图片描述

3. 生产经验–节点服役(新增Broker)和退役

3.1 服役新节点

  1. 新节点准备

在这里插入图片描述

  1. 执行负载均衡操作

在这里插入图片描述

  • 输入以下内容:

在这里插入图片描述

3.2 退役旧结点

在这里插入图片描述

在这里插入图片描述

4. Kafka副本

4.1 副本的信息

在这里插入图片描述

4.2 Leader的选举流程

在这里插入图片描述

举个栗子:

在这里插入图片描述

在这里插入图片描述

4.3 副本同步策略(见消费者剖析一文)

5. 文件存储

5.1 Kafka 文件存储机制

在这里插入图片描述

  • 由于生产者生产的消息会不断追加到log文件的末尾, 为了防止log文件过大而导致数据定位效率低下, Kafka采取了分片和索引机制, 将每个partition对应的log数据文件分为多个segment,每个segment对应着两个文件–.index文件 + .log文件 , 另外每个.log 的文件是在config/server.properties中log.segment.bytes规定了的, 通常是1GB.
  • 这些文件位于一个topic分区文件夹下, 该文件夹的命名规则为: topic名称+分区序号. 比如: 有个topic叫first, 他有三个partition(分区), 则其对应的文件夹为first-0, first-1, first-2, 每个文件夹中都有着一定数量的.index和.log文件.

看下图, 这是一个topic分区文件夹中的几个分片, 可以看到每个分片的.log和.index的命名相同, 都是以当前分片的最小偏移量命名的.
在这里插入图片描述


index文件和log文件内的数据详解
在这里插入图片描述
.index文件存储大量的索引信息, .log文件存储大量的数据, 索引文件中的元数据指向数据文件中消息的物理存储偏移地址.

kafka定位消息数据位置的步骤:

  1. 首先需要知道offset, 通过二分查找法, 找到存有这个offset信息的.index文件,
  2. 然后读取.log文件, 找到目标offset对应的消息数据在.log物理存储的偏移量(因为每条消息的存储大小都是固定的), 根据偏移量我们可以迅速定位到目标数据.

6. Kafka为什么这么快?(或是Kafka为什么有这么高的吞吐量)

  1. Kafka 本身是分布式集群, 可以采用分区技术, 并行度较高;
  2. 读数据采用稀疏索引, 可以快速定位要消费的数据;
  3. 顺序写入磁盘, 把数据追加到文件的末尾;
  4. 页缓存 + 零拷贝技术
Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐