从零学习Kafka:集群架构和基本概念

fka 官方文档给出的定义是:Apache Kafka 是一个事件流平台。它的关键能力如下:

  1. 发布(写入)和订阅(读取)事件流,包括从其他系统持续导入和导出数据。

  2. 将事件流持久可靠的存储,可以自定义时长。

  3. 实时处理事件流或历史回溯。

我们通过一个最基础的场景来理解一下这些定义:系统 A 将数据发送给 Kafka,Kafka 会将数据进行持久化存储,系统 B 从 Kafka 中读取系统 A 发送的数据。那么这里有两个关键问题:一是如何设计事件的编码格式,二是使用什么样的传输协议。

关于编码格式,目前有很多成熟的方案,比如 Protocol Buffer、Thrift、JSON 等。而 Kafka 使用的是纯二进制的字节序列。

确定好了编码格式之后,我们再来看传输协议。常见的传输协议有两种:

  1. 点对点模型:点对点模型也叫消息队列模型,即上游发送的数据只能由一个下游接收。对上面的场景来说,就是系统 A 发送的消息,只能由系统 B 接收。

  2. 发布/订阅模型:在这个模型中有 topic 的概念,会存在多个发布者向同一个 topic 发送消息,多个订阅者从 topic 读取消息的情况。

Kafka 同时支持这两种模型,这点我们在后面会具体阐述。

现在知道了什么是 Kafka 之后,我们再来考虑另一个问题:为什么要使用 Kafka?

这个问题每个人可能会有不同的答案,对我而言,使用 Kafka 最主要的原因是做流量缓冲和数据同步。

流量缓冲是 Kafka 的应用场景之一,在上面的例子中,当系统 A 有很大的突增流量时,如果直接对接系统 B,那么瞬时流量很有可能直接把系统 B 打挂。而 Kafka 就可以在中间起到一个缓冲的作用。给系统 B 留出充足的处理时间,同时也避免了因为系统 B 崩溃可能导致的整个链路的雪崩问题。

数据同步在实际应用场景中更多与 Flink 结合,完成离线数据链路流转或者离线到在线的数据传输。

有了这些基本的背景信息之后,我们再来看一些 Kafka 的核心概念。

核心概念

我们从一张图开始,对图中的概念逐个进行解释。

首先是 Topic,在 Kafka 中发布和订阅的对象就是 Topic。通常我们按照业务来拆分,把不同业务的数据放在不同的 Topic 中。

Topic 的数据是由 Producer 生产的。Producer 即生产者程序,它和 Consumer 都可以被称为 Kafka 集群的客户端。Producer 负责把消息写入对应的 Topic 中,在写入时会选择对应的 Partition。

Partition 类似于 HBase 中的 region,它是用来支撑横向扩展的。当我们的消息量太大时,一个 Partition 存不下或者处理不过来,我们可以选择扩 Partition 的数量。利用多分区分散存储和处理请求的压力。你可能还注意到,Partition 还有 Leader 和 Follower 之分,这其实是 Kafka 的副本机制(Replica),它是 Kafka 高可用手段之一。每个分区都会有 1 个 Leader 副本和 n 个 Follower 副本,写入消息和消费消息都是由 Leader 副本执行,Follower 只负责向 Leader 副本发送请求,将最新的消息发送给它,这样与 Leader 副本保持同步。

在 Kafka 集群的服务端,由 Broker 进程对客户端的请求进行处理。将多个 Broker 集群分别部署在不同的机器上是 Kafka 的高可用手段之一。

前面我们提到了 Kafka 除了发布/订阅模型之外,还支持点对点模型,对于点对点模型的支持,Kafka 是引入了 Consumer Group 的概念。Consumer Group 是由多个 Consumer 组成,负责消费一组主题,这组主题中的每一个 Partition 只能由其中的一个 Consumer 消费。如果有新增的 Consumer 加入或者现有的 Consumer 崩溃,那么就会进行 Rebalance。

在消息写入和消费流程中,分别有 Offset 和 Consumer Offset 两个概念。Offset 是在分区中递增的。Consumer Offset 是消费者用来记录自己消费到了哪个 Offset。

最后再多提一点,Kafka Broker 是使用 Log 保存数据,Log 底层又分成了多个 Log Segment,消息在 Log Segment 上只能追加写入,当一个 Log Segment 写满后,就会创建新的 Log Segment 继续写入。Kafka 还会定期清理旧的 Log Segment,以此来节省磁盘空间。

总结

本文我们先是简单介绍了什么是 Kafka,接着又介绍了几个核心概念。包括 Topic、Producer、Consumer、Consumer Group、Partition、Replica、Broker、Rebalance等。接下来让我们一起开始学习 Kafka 相关的知识吧。

相关推荐
li星野8 分钟前
【学习记录】PCB与PCBA核心知识全解析:从设计到制造的关键细节
学习·制造
木子n136 分钟前
软件架构设计实战-架构15.ISO 26262 架构设计要求:安全机制在架构里的落点
架构·autosar·功能安全·iso 26262
卿卿的产品经理日记1 小时前
【AI产品经理实战】Day 35|从“沉迷工具“到回归 AI 底层:Skill 收官、系统复盘与下一个 13 天
人工智能·学习·产品经理
这个DBA有点耶1 小时前
为什么UPDATE比SELECT危险得多?锁范围等于扫描行数
数据库·架构·代码规范
一条泥憨鱼1 小时前
【从0开始学习计算机网络】| ARP 协议:地址解析,ARP 欺骗,链路层寻址
网络·后端·学习·计算机网络
nvd112 小时前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
HY小宝F2 小时前
树莓派智能摄像头系统 30 天重学计划之 Day 04 · HTTP / API:控制链入口 —— 学习总结
网络协议·学习·http
我不是阵雨3 小时前
分布式事务难题与实战解法全解析
分布式·微服务·架构
尤水就下3 小时前
🔥预热:在线文档的 block 架构是如何实现的(未完待续...)
前端·javascript·架构
Dawson Zhu3 小时前
《Agentic Design Patterns》第 13 章导读:人机协同(Human-in-the-Loop)
人工智能·语言模型·架构·aigc·agi