news 2026/8/25 13:42:15

Kafka 核心特性:高吞吐低延迟消息系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kafka 核心特性:高吞吐低延迟消息系统

Apache Kafka:分布式消息系统的核心特性

Apache Kafka 是一个分布式、高吞吐、低延迟的发布-订阅消息系统,专为处理实时数据流而设计。它能够高效地处理海量数据,同时保证消息传递的可靠性和顺序性,是现代大数据架构中的关键组件。

一、核心数据流向

下图清晰地展示了 Kafka 生产者、Broker 集群(包含 Topic 和 Partition)、消费者组之间的数据流向与核心交互关系:

流程说明:

  1. 生产者将消息发布到指定的 Topic。
  2. Topic 由多个 Partition 组成,每个 Partition 有 Leader 副本(负责读写)和 Follower 副本(用于数据冗余)。
  3. Broker 集群中的节点共同承载所有 Partition 的存储与处理。
  4. 消费者组中的各个 Consumer 以负载均衡的方式从不同 Partition 拉取(pull)消息进行消费,实现并行处理。
  5. 一个 Partition 在同一时刻只能被同一个消费者组内的一个 Consumer 消费,确保了消息的顺序性和消费进度的精确管理。

二、主要使用场景

  • 日志收集:集中收集和存储来自不同服务的日志数据。
  • 消息系统:实现微服务之间的解耦与异步通信。
  • 流量削峰:在用户请求高峰期,先将请求写入 Kafka,后端服务按自身处理能力进行消费,平滑处理流量洪峰。
  • 实时流处理:作为流式数据处理管道的基础组件。
  • 数据持久化:提供高可靠性的数据存储,丢数据风险低。

三、核心概念解析

  • Broker:Kafka 集群中的服务器节点,负责存储和处理消息。
  • Topic:消息的逻辑分类,类似于数据库中的表名。
  • Partition:Topic 的物理分片,是 Kafka 实现并行处理的核心。一个 Topic 可以包含多个 Partition,这些 Partition 可以分布在不同的 Broker 上。
  • Consumer Group:消费者组,组内的消费者共同分担消费任务。一个 Partition 只能被同一个消费者组内的一个消费者消费,而一个消费者可以消费多个 Partition。

四、Kafka 分区机制的优势

  • 扩展性:分区可分布在不同节点,利用多台机器资源,提升集群吞吐量。
  • 并行消费:消费者组内可实现负载均衡,多个消费者并行处理数据。
  • 顺序性保证:只能保证单个 Partition 内的消息有序,不能保证整个 Topic 全部有序。

五、Kafka 消息不丢失保障机制

1. 生产者端配置

1.1 确认机制(acks)

  • acks=allacks=-1:要求 Kafka 的 Leader 分区副本必须等待所有在 ISR 列表中的 Follower 副本都成功写入消息后,才向生产者返回成功确认。
  • acks=0:发送即忘,不等待任何确认,性能最高但不可靠,极易丢失消息。
  • acks=1:只有 Leader 写入成功就返回确认,如果 Leader 在消息同步给 Follower 之前宕机,消息会丢失。

1.2 开启重试机制(retries > 0)

  • 当网络抖动、Leader 切换等可恢复的异常发生时,生产者会自动重新发送消息。

1.3 开启幂等性(enable.idempotence=true)

  • Kafka 会为每个生产者分配一个唯一的 ID(PID)和序列号,若生产者因重试而发送了重复消息,Broker 也能识别并去重,确保消息在单个分区内恰好一次写入。
2. 服务端配置
  • 配置合理的副本数(建议 ≥ 3)。
  • 设置最小同步副本数(建议 ≥ 2)。
  • 禁止非 ISR 副本选举。
3. 消费者端配置
  • 关闭自动提交 offset,采用手动提交 offset。
  • 实现业务幂等性:由于手动提交 offset 可能导致重复消费(例如:处理成功但提交失败),消费者业务逻辑需要实现幂等性,即一条消息被处理多次产生的结果与处理一次相同。常见方法包括:
    • 数据库唯一键约束
    • Redis 记录已处理消息

分区决定吞吐量,副本决定高可用

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 13:40:15

VS Code 的聊天窗口终于能 搜索 了!

你有没有在 VS Code 的聊天窗口(Chat)里试图按 CtrlF 找东西,然后发现——啥也没发生? 对,一直以来,VS Code 的聊天窗口不支持原生的查找功能。你想在对话记录里找某个关键词,要么靠肉眼扫描&am…

作者头像 李华
网站建设 2026/8/25 13:35:58

基于SpringBoot的共享汽车运营管理平台[源码免费+文档免费]

🍅全部选题源码免费分享、无偿获取,支持软件定制开发;由于篇幅限制,获取完整文章或源码、代做项目的,本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片。🍅 🍅全部选题源码…

作者头像 李华
网站建设 2026/8/25 13:33:10

C语言:结构体进阶

文章目录前言本文旨在系统性地介绍C语言中结构体的进阶知识。一、结构体类型声明1.1、嵌套结构体类型1.2、结构体的自引用1.3、typedef简化结构体类型1.4、匿名结构体类型1.4.1、匿名结构体类型唯一1.4.2、匿名结构体作为成员二、结构体数组三、结构体内存对齐3.1、对齐规则3.2…

作者头像 李华
网站建设 2026/8/25 13:32:24

React Hooks 为什么不能在条件分支/循环中调用?

React Hooks 为什么不能在条件分支/循环中调用?一、核心思路(一句话)React Hooks 通过"调用顺序(位置索引)"在 Fiber 节点的单向链表上匹配状态,而非通过名称或 key——任何改变调用顺序的写法都…

作者头像 李华
网站建设 2026/8/25 13:32:21

python学习笔记4 --Python的容器类型

第5章 Python的容器类型 5.1 容器概述 Python 提供了多种内置的容器类型,用于存储和组织数据。 内置的主要容器类型有: –列表list、元组tuple、字符串str、集合set、字典dict等, 另外Python还在collections模块中提供了更多容器类型,例如:双端队列deque等。 5.1.1 常见…

作者头像 李华
网站建设 2026/8/25 13:15:16

rocketMQ proxy架构分析

介绍proxy 模块是 RocketMQ 5.x 的 无状态代理组件 ,核心思路是:对外提供 gRPC 协议(面向多语言客户端),对内把请求翻译成 Remoting 协议访问 Broker/Namesrv,并原生支持 pop 消费模型。它有两种部署模式&a…

作者头像 李华