温故而知新,反复学习优秀的框架,定有所获。因为工作原因,需要用到 Kafka 的特殊场景,周末再次阅读了 kafka 的资料,收获不少。
应用场景:异步解构,在上下游没有强依赖的业务关系或针对单次请求不需要立刻处理的业务; 系统缓冲,有利于解决服务系统的吞吐量不一致的情况,尤其对处理速度较慢的服务来说起到缓冲作用; 消峰作用,对于短时间偶现的极端流量,对后端的服务可以启动保护作用; 数据流处理,集成 spaRk 做实事数据流处理。 Kafka 拓扑图(多副本机制)
由上图我们可以发现 Kafka 是分布式,同时对于每一个分区都存在多副本,同时整个集群的管理都通过 zookeepeR 管理。
Kafka 核心组件 bRokeR
Kafka 服务器,负责消息存储和转发;一 bRokeR 就代表一个 kafka 节点。一个 bRokeR 可以包含多个 topic
topic
消息类别,Kafka 按照 topic 来分类消息
paRtITion topic 的分区,一个 topic 可以包含多个 paRtITion,topic 消息保存在各个 paRtITion 上;由于一个 topic 能被分到多个分区上,给 kafka 提供给了并行的处理能力,这也正是 kafka 高吞吐的原因之一。 paRtITion 物理上由多个 segMent 文件组成,每个 segMent 大小相等,顺序读写(这也是 kafka 比较快的原因之一,不需要随机写)。每个 SegMent 数据文件以该段中最小的 oFFset ,文件扩展名为.log。当查找 oFFset 的 MeSSage 的时候,通过二分查找快找到 MeSSage 所处于的 SegMent 中。
oFFset 消息在日志中的位置,可以理解是消息在 paRtITion 上的偏移量,也是代表该消息的唯一序号。 同时也是主从之间的需要同步的信息。
PRodUCeR
生产者,负责向 Kafka BRokeR 发消息的客户端
ConsuMeR
消息消者,负责消费 Kafka BRokeR 中的消息
ConsuMeR GRoup
消费者组,每个 ConsuMeR 必须属于一个 gRoup;(注意的是 一个分区只能由组内一个消费者消费,消费者组之间互不影响。)
ZookeepeR
管理 kafka 集群,负责存储了集群 bRokeR、topic、paRtITion 等 Meta 数据存储,同时也负责 bRokeR 故障发现,paRtITion leadeR 选举,负载均衡等功能。
