架构与核心概念

理解 Kafka 的架构设计是掌握 Kafka 的第一步,本文介绍 Kafka 的核心组件和设计思想。

Kafka 简介

什么是 Kafka?

Kafka 是由 LinkedIn 开发的分布式流处理平台,后捐献给 Apache 基金会。它具有以下特点:

  • 高吞吐:单机可达百万级 TPS

  • 低延迟:毫秒级延迟

  • 高可用:支持多副本、自动故障转移

  • 可扩展:支持水平扩展

  • 持久化:消息持久化到磁盘

Kafka 的应用场景

1. 消息系统:解耦、异步、削峰
2. 日志收集:ELK 架构中的数据管道
3. 流处理:实时数据处理
4. 事件溯源:事件驱动架构
5. 数据同步:CDC、ETL

核心架构

整体架构图

核心组件

组件
说明

Broker

Kafka 服务节点,负责消息存储和转发

Topic

消息的逻辑分类,类似数据库的表

Partition

Topic 的物理分片,实现并行处理

Replica

分区的副本,实现高可用

Producer

消息生产者

Consumer

消息消费者

Consumer Group

消费者组,实现负载均衡

ZooKeeper/KRaft

集群元数据管理(新版本使用 KRaft)

Broker

Broker 的职责

Broker 配置示例

Topic 与 Partition

Topic

Topic 是消息的逻辑分类:

Partition

Partition 是 Topic 的物理分片:

Partition 的作用

  1. 并行处理:不同 Partition 可以被不同 Consumer 并行消费

  2. 负载均衡:消息分散到多个 Partition

  3. 顺序保证:单个 Partition 内消息有序

  4. 扩展性:通过增加 Partition 提升吞吐

分区数选择

Replica(副本机制)

副本角色

ISR(In-Sync Replicas)

ISR 是与 Leader 保持同步的副本集合:

Offset

什么是 Offset

Offset 是消息在 Partition 中的唯一标识:

Offset 管理

与传统 MQ 对比

Kafka vs RabbitMQ

特性
Kafka
RabbitMQ

协议

自定义协议

AMQP

消息模型

发布订阅

点对点 + 发布订阅

消息保留

可配置保留时间

消费后删除

吞吐量

百万级 TPS

万级 TPS

延迟

毫秒级

微秒级

消息顺序

分区内有序

队列内有序

消息回溯

支持

不支持

适用场景

日志、流处理、大数据

业务消息、RPC

Kafka vs RocketMQ

特性
Kafka
RocketMQ

开发语言

Scala/Java

Java

事务消息

支持(较复杂)

原生支持

延迟消息

不支持

原生支持

消息过滤

不支持

Tag/SQL 过滤

顺序消息

分区有序

队列有序

消息轨迹

不支持

支持

面试高频问题

1. Kafka 为什么吞吐量高?

2. Kafka 如何保证消息有序?

3. Partition 数量如何选择?

4. Kafka 的 ZooKeeper 作用?

总结

Last updated