基础
在深入了解Kafka之前,必须了解主题,经纪人,生产者和消费者等主要术语
术语
主题
Topics : 属于 特定类别的消息流
- 数据 存储 在 主题 中
- 主题被 拆分 成 分区 :
- 每个这样的分区包含 不可变 有序序列 的消息
- 分区被实现为具有 相等大小 的一组 分段文件
分区
Partition : 主题可能有许多分区,因此它可以处理任意数量的数据
分区偏移
Partition offset : 每个分区中的消息具有称为 offset 的 唯一序列标识
分区备份
Replicas of partition : 副本只是一个 分区的备份
副本从不读取或写入数据,它们用于防止数据丢失
代理人
Broker : 负责 维护 发布数据 的 简单系统
- 每个代理 中的 每个主题 可以具有 零个或多个 分区
假设在一个主题和N个代理中有N个分区,每个代理将有一个分区 假设在一个主题中有N个分区并且多于N个代理(n + m),则第一个N代理将具有一个分区,并且下一个M代理将不具有用于该特定主题的任何分区 假设在一个主题中有N个分区并且小于N个代理(n-m),每个代理将在它们之间具有一个或多个分区共享。 由于代理之间的负载分布不相等,不推荐使用此方案
Kafka集群
Kafka Cluster : Kafka有 多个代理 被称为 Kafka集群
- 可以扩展Kafka集群,无需停机
- 这些集群用于管理 消息数据的持久性和复制
生产者
Producer : 给 一个或多个 Kafka 主题 发送 消息 的发布者
- 生产者向 代理人 发送数据
- 每当生产者将消息发布给代理时, 代理 只需将 消息 附加到最后一个段文件
- 实际上,该消息将被 附加到分区
- 生产者还可以向他们 选择的分区 发送消息
消费者
Consumer : 从 代理 处 读取 数据
- 消费者 订阅 一个或多个 主题
- 通过从代理中提取数据来使用已发布的消息
领导者
Leader : 负责 给定分区 的所有 读取和写入 的 节点
每个分区都有一个服务器充当Leader
跟随者
Follower : 跟随 领导者指令 的 节点
- 跟随者作为 正常消费者 , 拉取消息 并 更新 其自己的 数据存储
如果领导者不可用,一个追随者将自动成为新的领导者
实例
在上图中, 主题 配置为 三个分区 :
- 分区1 具有 两个偏移因子 0 和 1
- 分区2 具有 四个偏移因子 0, 1, 2 和 3
- 分区3 具有 一个偏移因子 0
副本的id 与 承载它的服务器的id 相同
假设,如果 主题的复制因子 设置为 3,那么Kafka将 创建 每个分区 的 3个相同的副本 ,并将它们 放在集群 中以使其可用于其所有操作
为了平衡集群中的负载,每个代理都存储一个或多个这些分区 多个生产者和消费者可以同时发布和检索消息