乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 第1章 消息队列与 Kafka 概述

    • 章节导读
    • 消息队列基础
    • Kafka 概述
    • Kafka 为什么快
  • 第2章 快速上手:单机环境搭建

    • 章节导读
    • 环境准备与安装
    • 快速启动
    • Topic 管理
  • 第3章 核心概念:主题、分区与日志

    • 章节导读
    • Topic
    • Partition
    • Offset
    • Segment 与存储结构
  • 第4章 生产者详解

    • 章节导读
    • Producer 概述
    • Producer 发送机制
    • Producer 分区策略
    • Producer 幂等与事务
    • Producer 配置
  • 第5章 消费者与消费组

    • 章节导读
    • Consumer 概述
    • Consumer Group 消费组
    • Consumer 分区分配策略
    • Consumer Offset 提交
    • Consumer 多线程
    • Consumer 配置
  • 第6章 Broker 与控制器

    • 章节导读
    • Broker 概述
    • Broker 配置
    • Controller
    • KRaft 共识协议
  • 第7章 副本与数据可靠性

    • 章节导读
    • 副本机制
    • ISR 与副本同步
    • Leader 选举
    • ACK 与一致性保证
    • 高水位与 Leader Epoch
  • 第8章 存储与性能优化

    • 章节导读
    • 存储架构
    • 日志清理与压缩
    • Page Cache 与零拷贝
    • Producer 性能优化
    • Consumer 性能优化
    • Broker 性能优化
  • 第9章 生产环境运维与监控

    • 章节导读
    • Topic 管理
    • Kafka 运维工具
    • 监控
    • 常见故障排查
  • 第10章 Kafka生态与面试考点

    • 章节导读
    • Kafka 生态全景
    • 面试高频 30 题

Kafka 概述

定义与作用

Apache Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发并于 2011 年开源,现为 Apache 顶级项目。Kafka 远不止一个消息队列——它被设计为企业级实时数据管道的统一基础设施,提供消息的发布、订阅、存储和流式处理能力。

Kafka 是分布式系统的基础设施之一。本教程默认读者已具备网络与基础存储知识(TCP 协议、文件系统、Page Cache 等),并了解基本的 Linux 操作。

Kafka 解决的核心分布式问题:如何在海量数据场景下,以低延迟、高吞吐的方式可靠地传递与存储消息,同时支持多消费者独立消费和历史数据回放。

核心特性

特性说明对比传统 MQ
高吞吐单机可达百万 QPS(顺序 I/O + Page Cache + Zero Copy)RabbitMQ 万级
持久化消息写入磁盘日志,支持历史回放RabbitMQ 消费后即删
水平扩展Partition 机制天然支持分布式,增加 Broker 即可扩容传统 MQ 扩展困难
多消费者模型消费组内负载均衡 + 组间广播,灵活组合模型较单一
流处理Kafka Streams / ksqlDB 可直接在消息管道上做实时计算需要额外的流计算框架

四大核心 API

  • Producer API:应用程序向 Kafka Topic 发送数据
  • Consumer API:应用程序从 Kafka Topic 读取数据
  • Streams API:将输入 Topic 的数据实时转换后写入输出 Topic(流处理)
  • Connect API:连接外部系统(数据库、搜索引擎、文件系统)与 Kafka,实现导入/导出

发展简史

时间里程碑意义
2010LinkedIn 内部开发解决活动流数据管道问题
2011Apache 孵化器开源加入 Apache 基金会
2012Apache 顶级项目社区驱动快速发展
2014Kafka 0.8.0引入副本机制(Replication),大幅提升可靠性
2017Kafka 0.11.0精确一次语义(Exactly-once)+ 事务消息
2019Kafka 2.4.0引入 KRaft 元数据模式(去除 ZooKeeper 依赖)
2022Kafka 3.3.0KRaft 生产就绪(Production Ready)
2023Kafka 3.6+支持 Share Groups、分层存储(Tiered Storage)

与 RabbitMQ 的关键差异

维度KafkaRabbitMQ
核心模型分布式日志(Log)消息队列(Queue)
消息持久化默认持久化,可重放消费后删除(可配置持久化)
吞吐量百万级 QPS万级 QPS
消息顺序Partition 内严格有序队列有序,但多消费者乱序
路由灵活性简单(Key → Partition)灵活(Exchange + Binding)
协议自定义二进制协议AMQP 标准

选型建议:大规模日志/事件流、需要历史回溯 → Kafka;复杂路由、低延迟单条确认、与 AMQP 生态集成 → RabbitMQ。

集群架构概览

  • Broker:Kafka 服务节点,负责消息存储和转发
  • Producer:消息生产者,向指定 Topic 的 Partition Leader 发送数据
  • Consumer:消息消费者,从 Partition Leader 拉取数据
  • ZooKeeper / KRaft:集群元数据管理(KRaft 模式在 3.x 中已替代 ZooKeeper)

易错场景

场景:初次接触 Kafka 的开发者常误以为 Kafka 是一个"大号的 RabbitMQ",直接用它来做业务 RPC 级别的低延迟消息投递(如订单状态变更通知每条约 100 字节,延迟要求 < 5ms P99)。

问题:Kafka 的批处理设计天然引入毫秒级延迟(linger.ms 默认值为 0 但不保证零延迟),其性能优势体现在吞吐而非单条延迟。如果场景是低延迟小消息 + 复杂路由,RabbitMQ 更合适。

面试高频考点

Q:Kafka 为什么被描述为"分布式日志"而不是"消息队列"?

A:因为 Kafka 的核心抽象是一个只追加(append-only)的持久化日志,而非传统消息队列的消费即删除模型。消费者通过 Offset 自行管理消费位置,可以重复消费历史数据。这种设计使得 Kafka 不仅仅是一个消息通道,而是一个可重放的事件流存储系统,天然支持多消费者独立消费、数据回溯和故障恢复。

上一页
消息队列基础
下一页
Kafka 为什么快