3. Kafka核心概念:Topic、Partition、Producer、Consumer、Broker、Offset
说实话,Kafka 的概念其实不多,但每个都挺关键。我刚接触那会儿,总觉得这些名词绕来绕去,后来在项目里踩了几次坑,才真正搞明白它们之间的关系。
今天咱们就把这六个核心概念掰开揉碎,一个一个说清楚。
3.1 Broker——Kafka 的服务器节点
Broker 是 Kafka 集群里的一个服务器实例。说白了,它就是一台跑着 Kafka 进程的机器。
- 每个 Broker 都有一个唯一 ID(数字)
- 多个 Broker 组成一个集群
- 客户端连接任意一个 Broker 就能访问整个集群
3.2 Topic——消息的逻辑分类
Topic 是 Kafka 里最基础的概念。你可以把它理解成一个消息的“类别”或“主题”。
举个例子:我们做行为流采集,用户点击、页面浏览、下单支付,这些事件可以分别放到 click_topic、page_view_topic、order_topic 里。
每个 Topic 可以有多个消费者订阅,互不干扰。生产者只管往 Topic 里写,消费者只管从 Topic 里读,两边解耦。
3.3 Partition——真正的存储单元
Partition 是 Kafka 实现高吞吐的核心。一个 Topic 会被分成多个 Partition,每个 Partition 是一个有序的、不可变的日志文件。
为什么要分区?
- 并行读写:多个 Partition 可以分布在多个 Broker 上,读写可以并行
- 水平扩展:数据量大了,加 Partition 就行
- 负载均衡:不同 Partition 可以分配到不同 Broker
我记得有一次,线上一个 Topic 只有一个 Partition,消费者处理不过来,消息积压了几百万条。后来改成 6 个 Partition,问题立刻解决了。
3.4 Offset——消息的唯一编号
每个 Partition 里的消息都有一个唯一的 Offset。你可以把它理解成消息在日志文件里的“行号”。
Offset 从 0 开始,每条新消息的 Offset 递增 1。消费者读取消息时,需要告诉 Kafka 从哪个 Offset 开始读。
举个例子:
Partition 0 的消息:
Offset 0: 用户A点击了按钮
Offset 1: 用户B浏览了页面
Offset 2: 用户C提交了订单
消费者可以指定从 Offset 1 开始读,跳过前面的消息。这就是 Kafka 支持“回溯消费”的原因。
3.5 Producer——消息的生产者
Producer 负责把消息发送到指定的 Topic。它有几个关键行为:
- 选择 Partition:可以指定 key,Kafka 根据 key 的哈希值决定发到哪个 Partition
- 确认机制:acks 参数控制生产者等待多少个副本确认
- 重试机制:发送失败时自动重试
我个人习惯把 acks 设为 all,虽然慢一点,但保证消息不丢。如果对吞吐要求极高,可以设为 1,但要做好丢消息的心理准备。
3.6 Consumer——消息的消费者
Consumer 从 Topic 拉取消息。它有几个重要概念:
- Consumer Group:一组消费者共同消费一个 Topic,每个 Partition 只能被组内的一个消费者消费
- Rebalance:当消费者加入或退出时,Partition 的分配会重新调整
- Offset 管理:消费者需要记录自己消费到了哪个 Offset
你想想看,如果两个消费者在同一个 Group 里,它们会分摊 Partition。如果 Group 里只有一个消费者,那它就要消费所有 Partition。
3.7 它们之间的关系
说了这么多,咱们用一张图来总结一下:
3.8 核心概念速查表
最后,我整理了一个速查表,方便你随时回顾:
| 概念 | 一句话解释 | 我的建议 |
|---|---|---|
| Broker | Kafka 服务器节点 | 至少 3 个,避免单点故障 |
| Topic | 消息的逻辑分类 | 按业务类型划分,别混在一起 |
| Partition | 消息的物理存储单元 | 数量根据吞吐量预估,后期可扩展 |
| Offset | 消息在 Partition 内的编号 | 手动提交更可控,但要注意幂等性 |
| Producer | 消息的生产者 | acks 设为 all,保证不丢消息 |
| Consumer | 消息的消费者 | Group 内消费者数 ≤ Partition 数 |
嗯,这六个概念搞清楚了,Kafka 的基本架构你就掌握了八成。后面咱们会基于这些概念,一步步搭建行为流采集系统。