Kafa基础介绍

Kafa基础介绍

_

一、Kafka介绍

Kafka 是 Apache 开源的一款基于 zookeeper 协调的分布式消息系统,具有高吞吐率、高性能、实时、高可靠等特点,可实时处理流式数据。它最初由 LinkedIn 公司开发,使用 Scala 语言编写。

Kafka历经数年的发展,从最初纯粹的消息引擎,到近几年开始在流处理平台生态圈发力,多个组织或公司发布了各种不同特性的产品。常见产品如下:

  • Apache Kafka :最“正统”的Kafka也是开源版,它是后面其他所有发行版的基础。
  • Cloudera/Hortonworks Kafka :集成了目前主流的大数据框架,能够帮助用户实现从分布式存储、集群调度、流处理到机器学习、实时数据库等全方位的数据处理。
  • Confluent Kafka :主要提供基于Kafka的企业级流处理解决方案。

Kafka 不是传统意义上的“消息队列”,它更准确是:

分布式日志系统(Distributed Log System) + 流处理平台

Kafka 的特点

  • 高吞吐量、低延迟:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息,它的延迟最低只有几毫秒
  • 持久性:支持消息持久化,即使数TB级别的消息也能够保持长时间的稳定性能。
  • 可靠性:支持数据备份防止丢失
  • 容错性:支持通过Kafka服务器和消费机集群来分区消息,允许集群中的节点失败(若分区副本数量为n,则允许n-1个节点失败)
  • 高并发:单机可支持数千个客户端同时读写,支持在线水平扩展。可无缝对接hadoop、strom、spark等,支持Hadoop并行数据加载

Kafka 应用场景

ID设计目标功能
1日志收集一个公司用Kafka可以收集各种服务的Log,通过Kafka以统一接口服务的方式开放给各种Consumer
2消息系统解耦生产者和消费者、缓存消息等
3用户活动跟踪用来记录Web用户或者APP用户的各种活动,如网页搜索、搜索、点击,用户数据收集然后进行用户行为分析。
4运营指标Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告
5流式处理比如Spark Streaming和Storm

核心思想 :消息不是“消费即删除”(RabbitMQ 思维)而是:消息被持久化存储,消费者自己决定读到哪(offset)

二,Kafka结构

2.1 Producer

负责:发送消息到 Kafka

关键点:可以指定 partition,默认根据 key hash 分区

2.2 Consumer

负责:从 Kafka 读取消息

重要特点:

  • 主动拉取(pull)
  • 自己维护 offset

2.3 Broker

一个 Kafka 服务器实例,在 Kafka 集群中会有多个 broker 实例

image-20260415145054753.png

2.4 Topic

Topic 中文意思是主题,在 Kafka 中只是一个逻辑概念,代表某一类消息,结合具体项目中的业务功能,我们可以为每一个具体功能创建一个 Topic。

image-20260415145045668.png

2.5 Partition

Partition 就是分区,为什么要分区?

  • 有了分区就可以把消息数据分散到不同broker上保存。

image-20260415145030996.png

假设你有 3 个 broker(3 台机器):

分区数含义是否可行
1 个分区所有数据只存在某一台 broker 上✅ 可行
3 个分区每台 broker 上存一个分区✅ 可行
6 个分区平均每台 broker 存 2 个分区✅ 可行
10 个分区有的 broker 存 3 个,有的存 4 个✅ 可行

结论:分区数可以和 broker 数任意搭配, 分区越多 = 并行度越高 = 吞吐量越大(但有边际递减)

2.6 Replication

数据分区之后有一个问题:每个 broker 上保存一部分数据,如果某个 broker 宕机,那么数据就会不完整,所以 Kafka 允许分区创建副本。

image-20260415145014635.png

副本数必须 <=broker 数量

2.7 主从

当分区存在副本时,就会区分 Leader、Follower:

  • Leader:主分片,负责接收生产者端发送过来的消息,对接消费者端消费消息
  • Follower:不和生产者、消费者交互,仅负责和Leader同步数据

创建 Topic 时通过“分区数”指定 Partition 的数量,通过“复制因子”指定副本数量,分区数和复制因子都不能为 0

  • 分区数为1,复制因子为1表示:1个Partition内有1个Leader(此时数据只有一份,没有冗余的副本,生产环境不建议)
  • 复制因子为2表示每个Partition中包含1个Leader和1个Follower

image-20260415144938785.png

2.8 注册

Kafka 工作过程中,broker、Partition……信息都需要在 Zookeeper 中注册

image-20260415145130134.png

二,Kafka vs RabbitMQ

维度KafkaRabbitMQ
模型日志流消息队列
消息删除不删除(按时间/大小)消费即删
消费方式pullpush
顺序性partition 内保证queue 保证
吞吐量极高(百万级)较低
使用场景日志、流处理、大数据业务解耦、任务队列

结论:

  • RabbitMQ:业务消息
  • Kafka:数据流/日志流

三,Kafka的集群工作机制

Kafka 集群架构大体如下图:

2953321-20260412222915502-286315687.png

为什么要用集群?

单机服务下,Kafka 已经具备了非常高的性能。TPS 能够达到百万级别。但是,在际工作中使用时,单机搭建的 Kafka 会有很大的局限性。

  • 一方面:消息太多,需要分开保存。Kafka 是面向海量消息设计的,一个 Topic 下的消息会非常多,单机服务很难存得下来。这些消息就需要分成不同的 Partition,分布到多个不同的 Broker 上。这样每个 Broker 就只需要保存一部分数据。这些分区的个数就称为分区数

  • 另一方面:服务不稳定,数据容易丢失。单机服务下,如果服务崩溃,数据就丢失了,为了保证数据安全,就需要给每个 Partation 配置一个或多个备份,保证致据不丢失,Kafka 的集群模式下,每个 Partion 都有一个或多个备份。Kafka 会通过一个统一的 Zookeeper 集群作为选举中心,给每个 Partion 选举出一个主节点 Leader,其他节点就是从节点 Folower。主节点負责响应客户端的具体业务请求,并保存消息。而从节点则负责同步主节点的数据。当主节点发生故障时,Kaftka 会选举出一个从节点成为新的主节点。

  • 最后:Kaka 集群中的这些 Broker 信息,包括 Partition 的选举信息,都会保存在额外部署的 Zookeper 集群当中,这样,kafka 集群就不会因为某一些 Broker 服务崩遗而中断。

CSS基础 2026-04-10
Kafka基础操作 2026-04-15

© 2026 苏叶的belog