前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kafka工作原理学习

Kafka工作原理学习

作者头像
Linux运维技术之路
发布于 2025-02-25 02:30:02
发布于 2025-02-25 02:30:02
16900
代码可运行
举报
运行总次数:0
代码可运行

Kafka 工作原理

Apache Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,并于 2011 年开源。Kafka 的设计目标是提供高吞吐量、低延迟的消息传递系统,适用于大规模数据流处理和实时分析。它广泛应用于日志收集、监控数据聚合、流式数据处理等场景。

核心概念
  1. 1. Producer(生产者):负责将消息发布到 Kafka 集群中的某个 Topic。
  2. 2. Consumer(消费者):从 Kafka 集群中订阅 Topic,并消费消息。
  3. 3. Topic(主题):消息的分类或通道,生产者将消息发送到特定的 Topic,消费者从 Topic 中读取消息。
  4. 4. Partition(分区):每个 Topic 可以分为多个 Partition,Partition 是 Kafka 实现并行处理和扩展性的关键。每个 Partition 是一个有序的、不可变的消息序列。
  5. 5. Broker(代理):Kafka 集群中的每个节点称为 Broker,负责存储和传递消息。
  6. 6. Offset(偏移量):每个 Partition 中的消息都有一个唯一的 Offset,表示消息在 Partition 中的位置。
  7. 7. Consumer Group(消费者组):一组消费者共同消费一个 Topic 的消息,每个 Partition 只能被同一个 Consumer Group 中的一个消费者消费。
工作流程
  1. 1. 消息生产:Producer 将消息发送到指定的 Topic,Kafka 会根据 Partition 的策略(如轮询、哈希等)将消息分配到不同的 Partition。
  2. 2. 消息存储:每个 Partition 的消息会被持久化存储在 Broker 上,Kafka 使用顺序写入的方式提高性能。
  3. 3. 消息消费:Consumer 从指定的 Topic 和 Partition 中拉取消息,并通过 Offset 记录消费进度。Kafka 支持消费者组的概念,允许多个消费者协同工作。
  4. 4. 消息删除:Kafka 会根据配置的保留策略(如时间或大小限制)定期删除旧的消息。
特性
  • 高吞吐量:Kafka 能够处理每秒数百万条消息,适合大规模数据流处理。
  • 持久化存储:Kafka 将消息持久化到磁盘,支持消息的重放和容错。
  • 分布式架构:Kafka 是分布式的,支持水平扩展,能够处理大规模数据。
  • 多消费者支持:Kafka 支持多个消费者组同时消费同一个 Topic 的消息,互不影响。

案例说明

场景:电商平台订单处理系统

假设我们有一个电商平台,用户下单后需要进行一系列处理,包括订单验证、库存检查、支付处理、物流安排等。为了提高系统的可扩展性和解耦,我们可以使用 Kafka 来构建一个基于消息队列的订单处理系统。

系统架构
  1. 1. 订单服务(Order Service):当用户下单时,订单服务将订单信息发送到 Kafka 的 order-topic
  2. 2. 验证服务(Validation Service):从 order-topic 中消费订单消息,验证订单的合法性(如用户信息、商品信息等),并将验证结果发送到 validation-result-topic
  3. 3. 库存服务(Inventory Service):从 validation-result-topic 中消费验证通过的订单,检查库存是否充足,并将结果发送到 inventory-result-topic
  4. 4. 支付服务(Payment Service):从 inventory-result-topic 中消费库存检查通过的订单,处理支付逻辑,并将支付结果发送到 payment-result-topic
  5. 5. 物流服务(Logistics Service):从 payment-result-topic 中消费支付成功的订单,安排物流配送。
数据流图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
用户下单 -> Order Service -> [Kafka: order-topic] 
                            -> Validation Service -> [Kafka: validation-result-topic]
                            -> Inventory Service -> [Kafka: inventory-result-topic]
                            -> Payment Service -> [Kafka: payment-result-topic]
                            -> Logistics Service
实现步骤

1. 订单服务(Producer)

  • • 当用户下单时,订单服务将订单信息(如订单号、用户ID、商品ID、数量等)作为消息发送到 Kafka 的 order-topic
  • • 示例代码(Java):Properties props=newProperties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = newKafkaProducer<>(props); Stringtopic="order-topic"; StringorderId="order-123"; StringorderDetails="{\"orderId\":\"" + orderId + "\", \"userId\":\"user-456\", \"productId\":\"product-789\", \"quantity\":2}"; ProducerRecord<String, String> record = newProducerRecord<>(topic, orderId, orderDetails); producer.send(record); producer.close();

2. 验证服务(Consumer)

  • • 验证服务订阅 order-topic,消费订单消息,验证订单的合法性(如检查用户是否存在、商品是否有效等),并将验证结果发送到 validation-result-topic
  • • 示例代码(Java):Properties props=newProperties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "validation-group"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = newKafkaConsumer<>(props); consumer.subscribe(Arrays.asList("order-topic")); while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<String, String> record : records) { StringorderId= record.key(); StringorderDetails= record.value(); // 验证订单逻辑 booleanisValid= validateOrder(orderDetails); if (isValid) { // 发送验证结果到 validation-result-topic sendToKafka("validation-result-topic", orderId, orderDetails); } } }

3. 库存服务(Consumer)

  • • 库存服务订阅 validation-result-topic,消费验证通过的订单,检查库存是否充足,并将结果发送到 inventory-result-topic

4. 支付服务(Consumer)

  • • 支付服务订阅 inventory-result-topic,消费库存检查通过的订单,处理支付逻辑,并将支付结果发送到 payment-result-topic

5. 物流服务(Consumer)

  • • 物流服务订阅 payment-result-topic,消费支付成功的订单,安排物流配送。
优势
  • 解耦:各个服务之间通过 Kafka 进行通信,彼此独立,降低了系统的耦合度。
  • 可扩展性:Kafka 支持水平扩展,可以轻松应对订单量的增长。
  • 容错性:Kafka 提供了消息持久化和重放机制,即使某个服务暂时不可用,也不会丢失消息。
  • 异步处理:订单处理的各个环节可以异步执行,提高了系统的响应速度和吞吐量。

总结

Kafka 是一个强大的分布式消息队列系统,适合处理大规模数据流。通过上述电商平台订单处理系统的案例,我们可以看到 Kafka 在解耦、扩展性和容错性方面的优势。Kafka 的核心在于其高效的分区机制和持久化存储,能够满足高吞吐量、低延迟的需求

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux运维技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kafka教程_图解kafka
推荐【Kafka教程】https://bigbird.blog.csdn.net/article/details/108770504 推荐【rabbitmq教程】https://bigbird.blog.csdn.net/article/details/81436980 推荐【Flink教程】https://blog.csdn.net/hellozpc/article/details/109413465 推荐【SpringBoot教程】https://blog.csdn.net/hellozpc/article/details/107095951 推荐【SpringCloud教程】https://blog.csdn.net/hellozpc/article/details/83692496 推荐【Mybatis教程】https://blog.csdn.net/hellozpc/article/details/80878563 推荐【SnowFlake教程】https://blog.csdn.net/hellozpc/article/details/108248227 推荐【并发限流教程】https://blog.csdn.net/hellozpc/article/details/107582771 推荐【JVM面试与调优教程】https://bigbird.blog.csdn.net/article/details/113888604
全栈程序员站长
2022/11/03
2.3K1
Kafka教程_图解kafka
三万字 | Kafka 知识体系保姆级教程宝典
一、消息队列 Apache Pulsar Pulsar 与 Kafka 对比 二、Kafka基础 三、Kafka架构及组件 四、Kafka集群操作 五、Kafka的JavaAPI操作 六、Kafka中的数据不丢失机制 七、Kafka配置文件说明 八、CAP理论 九、Kafka中的CAP机制 十、Kafka监控及运维 十一、Kafka大厂面试题
五分钟学大数据
2021/11/08
1.3K0
看完这篇Kafka,你也许就会了Kafka[通俗易懂]
Kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理。既然是消息队列,那么Kafka也就拥有消息队列的相应的特性了。
全栈程序员站长
2022/08/24
17.2K4
看完这篇Kafka,你也许就会了Kafka[通俗易懂]
Kafka
优点: (1)解耦 (2)冗余(备份) (3)扩展性 (4)灵活性、峰值处理能力 (5)可恢复性(冗余) (6)顺序保证(队列) (7)缓冲(冗余) (8)异步通信(宕机)
matt
2022/10/25
4960
Kafka
【年后跳槽必看篇-非广告】Kafka核心知识点-第二章
所谓的消息幂等性就是如何保证消息只消费一次不重复消费。这需要从Kafka的多个角度去回答该问题一是要包含Kafka自身的机制,还需要考虑客户端自己的重复处理。
@派大星
2024/01/23
2730
Kafka超详细学习笔记【概念理解,安装配置】
Apache Kafka 是一个分布式流处理平台:distributed streaming platform。
烂猪皮
2023/09/04
1.5K0
Kafka超详细学习笔记【概念理解,安装配置】
我们在学习Kafka的时候,到底在学习什么?
我在之前《Kafka源码阅读的一些小提示》写了一些关于Kafka源码阅读的注意事项。
大数据真好玩
2021/09/18
3380
我们在学习Kafka的时候,到底在学习什么?
Kafka基础篇学习笔记整理
KafkaProducer会将消息先放入缓冲区中,然后由单独的sender线程异步发送到broker服务端,那么既然消息是批量发送的,那么触发批量发送的条件是什么呢?
大忽悠爱学习
2023/04/23
3.8K0
Kafka基础篇学习笔记整理
Kafka学习(三)-------- Kafka核心之Consumer
了解了什么是kafka( https://www.cnblogs.com/tree1123/p/11226880.html)以后
大数据流动
2019/08/08
2K0
你必须要知道的kafka
Apache Kafka最早是由LinkedIn开源出来的分布式消息系统,现在是Apache旗下的一个子项目,并且已经成为开源领域应用最广泛的消息系统之一。Kafka社区非常活跃,从0.9版本开始,Kafka的标语已经从“一个高吞吐量,分布式的消息系统”改为"一个分布式流平台"。
用户5397975
2019/10/14
7840
【Spring底层原理高级进阶】Spring Kafka:实时数据流处理,让业务风起云涌!️
Spring Kafka 是 Spring Framework 提供的一个集成 Apache Kafka 的库,用于构建基于 Kafka 的实时数据流处理应用程序。Apache Kafka 是一个高性能、分布式的流数据平台,广泛用于构建可扩展的、实时的数据处理管道。
苏泽
2024/03/10
1.2K0
【Spring底层原理高级进阶】Spring Kafka:实时数据流处理,让业务风起云涌!️
Kafka入门篇学习笔记整理
本文只包含Kafka入门使用导学,后续会继续整理Kafka进阶知识与底层原理剖析。
大忽悠爱学习
2023/04/12
1.3K0
Kafka入门篇学习笔记整理
Kafka详解
  Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
忧愁的chafry
2022/10/30
1.4K0
Kafka详解
Kafka基本原理
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、分布式的、分区的和可复制的提交日志服务。
Bug开发工程师
2018/08/03
7090
Kafka基本原理
如何保证Kafka顺序消费
在分布式消息系统中,消息的顺序性是一个重要的问题。Apache Kafka 提供了多种机制来确保消息的顺序消费,但需要根据具体的使用场景进行配置和设计。以下是一些确保 Kafka 顺序消费的关键点和方法:
小马哥学JAVA
2024/07/03
1.6K0
Kafka:新闻发布站的比喻
Kafka就像一个忙碌的新闻发布站,它能够处理和分发大量的实时信息。通过新闻发布站的比喻来详细解释Kafka中的各个知识点、设计思想,结合具体的代码和面试常问的问题。
GeekLiHua
2025/01/21
1030
kafka教程_scala为什么用的很少
Kafka 是一个分布式的基于【发布/订阅模式】的消息队列(Message Queue),主要应用于 大数据实时处理领域。
全栈程序员站长
2022/11/19
7400
kafka教程_scala为什么用的很少
kafka的JavaAPI操作(4)——进来了解一下吧!
快速认识Kafka阶段(1)——最详细的Kafka介绍 教你快速搭建Kafka集群(2)——Kafka集群安装部署Kafka集群的简单操作入门(3)——Kafka集群操作 前面三篇文章给大家分享了kafka的一些理论知识和简单的操作,下面给大家分享Kafka的JavaAPI的操作!!!
刘浩的BigDataPath
2021/04/13
3400
kafka的JavaAPI操作(4)——进来了解一下吧!
Apache Kafka-初体验Kafka(04)-Java客户端操作Kafka
操作步骤 Maven依赖 核心依赖 kafka-clients <dependency> <groupId>org.apache.kafkagroupId>
小小工匠
2021/08/17
5800
Kafka集群搭建
 安装kafka集群之前,确保zookeeper服务已经正常运行,这里3台zookeeper准备工作都已完成,三台主机分别为:192.168.3.220,192.168.3.221,192.168.3.222
HUC思梦
2020/09/03
1.7K0
相关推荐
Kafka教程_图解kafka
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验