当前位置: 首页 > news >正文

【Note】《Kafka: The Definitive Guide》第一章:Meet Kafka

《Kafka: The Definitive Guide》第一章:Meet Kafka

一、章节定位与主旨

本章是本书的引导章节,目标是介绍 Kafka 是什么、为什么重要、以及它解决了哪些现实问题。本章以一个日常场景(用户在智能手机上叫车)作为引子,引出 Kafka 的核心作用:在多个系统之间实时流动数据,进行解耦与异步通信


二、现实问题的引入:打车应用场景

以一个现代打车应用为例(如 Uber、Lyft):

  • 用户在手机上发出请求;

  • 应用系统需要:

    • 知道用户的位置;
    • 显示地图;
    • 计算价格;
    • 向司机广播请求;
    • 收集日志用于监控与分析;
    • 后台保存订单记录;
    • 推送通知等。

这些功能往往依赖不同的子系统(微服务),而每个系统又依赖实时数据。但这些数据的流动如果通过点对点 RPC 或数据库轮询等方式,会带来如下问题:

问题描述
耦合度高系统与系统直接通信,一旦某个系统挂了,整个链条崩溃
数据重复写入为了满足不同子系统的需要,数据可能需要写入多次
无法扩展想增加新系统就要改写原有逻辑,扩展成本高
实时性差数据更新滞后,不适合处理实时场景

于是引出 Kafka 作为中间层:“一个持久的、可订阅的数据管道”


三、Kafka 的核心理念与作用

Kafka 并非传统意义上的消息队列,而是一个分布式日志系统 + 发布订阅平台 + 流处理平台。它的核心理念包括:

1. 发布-订阅模式(Publish-Subscribe)
  • 生产者(Producer)向 Kafka topic 发布消息;
  • 消费者(Consumer)订阅 topic,异步处理消息;
  • 多个消费者组可以并行、独立消费数据。
2. 持久化日志(Durable Log)
  • Kafka 将所有消息写入磁盘,形成一个 append-only log;
  • 消息按照时间顺序存储,天然支持事件回溯与重放。
3. 解耦系统架构
  • Kafka 位于生产者与消费者之间,充当“系统之间的数据缓冲区”;
  • 改变任一端的实现,不会影响另一端。
4. 高吞吐、低延迟、容错性好
  • Kafka 通过分区(Partition)与副本(Replica)机制,天然支持水平扩展与容错恢复。

四、Kafka 典型使用场景

作者列举了多个 Kafka 的典型应用场景:

场景描述
事件追踪(Event Sourcing)所有变更操作写入 Kafka topic,方便回溯与审计
日志聚合(Log Aggregation)收集微服务的运行日志到统一平台
指标收集与监控(Metrics)采集指标流到可视化系统如 Grafana
实时 ETL替代传统离线批处理 ETL,实现实时数据仓库更新
流处理(Streaming)搭配 Kafka Streams、ksqlDB 做实时计算

五、与传统系统的区别

作者将 Kafka 与传统 MQ(如 RabbitMQ、ActiveMQ)做了对比:

特性Kafka传统 MQ
消息保留可配置长时间甚至永久保存通常消费即删除
订阅方式消费者可从任意偏移(offset)开始读通常是 push 到消费者
吞吐能力面向磁盘优化,吞吐量高设计偏内存,吞吐较低
重放与审计支持不支持或很弱
扩展性高,易于分布式部署通常偏单机或小规模集群

Kafka 实质上是“消息队列 + 日志数据库 + 流处理平台”的集合体。


六、愿景与引导

作者强调 Kafka 是“数据系统之间的粘合剂(nervous system)”,是构建现代数据基础设施的核心组件。Kafka 帮助系统从面向过程(按需请求)向面向事件(数据驱动)转变,是构建实时平台(real-time platform)不可缺少的一环。


总结

  1. Kafka 是一个高吞吐、持久化的分布式事件流平台;
  2. Kafka 用于连接、缓冲和处理分布式系统中的数据;
  3. 它极大地降低了系统间的耦合性,提升了弹性与实时性;
  4. Kafka 被广泛用于日志收集、监控分析、事件驱动系统、流计算等场景;
  5. Kafka 的设计哲学是将“日志”作为核心数据结构,服务于各种数据驱动架构。
http://www.dtcms.com/a/268118.html

相关文章:

  • LeetCode--41.缺失的第一个正数
  • get: ()=>state 和get: ()=>{state}
  • Java 集合
  • ClickHouse 全生命周期性能优化
  • Java 大视界 -- Java 大数据机器学习模型在金融衍生品创新设计与风险评估中的应用(335)
  • 人工智能在软件开发领域的应用优势劣分析及应对策略
  • js event.preventDefault()的作用
  • Web前端开发-HTML、CSS
  • 【从0-1的CSS】第3篇:盒子模型与弹性布局
  • Application的onLowMemory从Android API 34开始系统不再触发,从API 35开始废弃
  • 网安系列【7】之文件上传漏洞
  • 云服务器环境配置——安装Tomcat
  • Redis集群部署指南:高可用与分布式实践
  • 网关多次读取流问题
  • 老树新花语新颜,汉字筑渠话情流——与ai助手闲聊成诗(智普清言)
  • 程序员在线接单
  • Python设计小游戏方法简介
  • SpringBoot基于Mysql的商业辅助决策系统设计与实现
  • Web前端开发-Vue
  • 【网络安全基础】第九章---IP安全
  • unix环境编程试题
  • 平台设备总线相关概念(RK3588)
  • 多模态大模型推理技术突破:从 CoT 数据到 RL 优化,AI 推理如何征服复杂任务?
  • 开源!RAG竞技场(2):标准RAG算法
  • 编程语言艺术:C语言中的属性attribute笔记总结
  • RPC/gRPC入门学习
  • GM DC Monitor和WGCLOUD,能比吗?
  • 深入理解原子类与CAS无锁编程:原理、实战与优化
  • 【大模型LLM】 Megatron-LM 大模型训练框架吞吐率计算吞吐率优化策略
  • Rust实战:中医丹方智能管理系统