Kafka 在分布式系统中的 7 大应用场景

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: Kafka 是一个开源的分布式流式平台,它可以处理大量的实时数据,并提供高吞吐量,低延迟,高可靠性和高可扩展性。Kafka 的核心组件包括生产者(Producer),消费者(Consumer),主题(Topic),分区(Partition),副本(Replica),日志(Log),偏移量(Offset)和代理(Broker)。

Kafka 介绍

Kafka 是一个开源的分布式流式平台,它可以处理大量的实时数据,并提供高吞吐量,低延迟,高可靠性和高可扩展性。Kafka 的核心组件包括生产者(Producer),消费者(Consumer),主题(Topic),分区(Partition),副本(Replica),日志(Log),偏移量(Offset)和代理(Broker)。Kafka 的主要特点有:

  • 数据磁盘持久化:Kafka 将消息直接写入到磁盘,而不依赖于内存缓存,从而提高了数据的持久性和容错性。
  • 零拷贝:Kafka 利用操作系统的零拷贝特性,减少了数据在内核空间和用户空间之间的复制,降低了 CPU 和内存的开销。
  • 数据批量发送:Kafka 支持生产者和消费者批量发送和接收数据,减少了网络请求的次数和开销。
  • 数据压缩:Kafka 支持多种压缩算法,如 gzip,snappy,lz4 等,可以有效地减少数据的大小和传输时间。
  • 主题划分为多个分区:Kafka 将一个主题划分为多个分区,每个分区是一个有序的消息队列,分区之间可以并行地读写数据,提高了系统的并发能力。
  • 分区副本机制:Kafka 为每个分区设置多个副本,分布在不同的代理节点上,保证了数据的冗余和一致性。其中一个副本被选为领导者(Leader),负责处理该分区的读写请求,其他副本为追随者(Follower),负责从领导者同步数据,并在领导者失效时进行故障转移。

Kafka 最初是为分布式系统中海量日志处理而设计的。它可以通过持久化功能将消息保存到磁盘直到过期,并让消费者按照自己的节奏提取消息。与它的前辈不同(RabbitMQ、ActiveMQ),Kafka 不仅仅是一个消息队列,它还是一个开源的分布式流处理平台。

Kafka 的应用场景

Kafka 作为一款热门的消息队列中间件,具备高效可靠的消息异步传递机制,主要用于不同系统间的数据交流和传递。下面给大家介绍一下 Kafka 在分布式系统中的 7 个常用应用场景

  • 日志处理与分析
  • 推荐数据流
  • 系统监控与报警
  • CDC(数据变更捕获)
  • 系统迁移
  • 事件溯源
  • 消息队列

1. 日志处理与分析

日志收集是 Kafka 最初的设计目标之一,也是最常见的应用场景之一。可以用 Kafka 收集各种服务的日志,如 web 服务器、服务器日志、数据库服务器等,通过 Kafka 以统一接口服务的方式开放给各种消费者,例如 Flink、Hadoop、Hbase、ElasticSearch 等。这样可以实现分布式系统中海量日志数据的处理与分析。

下图是一张典型的 ELK(Elastic-Logstash-Kibana)分布式日志采集架构。

  1. 购物车服务将日志数据写在 log 文件中。
  2. Logstash 读取日志文件发送到 Kafka 的日志主题中。
  3. ElasticSearch 订阅日志主题,建立日志索引,保存日志数据。
  4. 开发者通过 Kibana 连接到 ElasticSeach 即可查询其日志索引内容。

image.png

waynboot-mall 是一套全部开源的微商城项目,包含三个项目:运营后台、H5 商城前台和服务端接口。实现了商城所需的首页展示、商品分类、商品详情、商品 sku、分词搜索、购物车、结算下单、支付宝/微信支付、收单评论以及完善的后台管理等一系列功能。 技术上基于最新得 Springboot3.0、jdk17,整合了 MySql、Redis、RabbitMQ、ElasticSearch 等常用中间件。分模块设计、简洁易维护,欢迎大家点个 star、关注博主。

github 地址:github.com/wayn111/way…

2. 推荐数据流

流式处理是 Kafka 在大数据领域的重要应用场景之一。可以用 Kafka 作为流式处理平台的数据源或数据输出,与 Spark Streaming、Storm、Flink 等框架进行集成,实现对实时数据的处理和分析,如过滤、转换、聚合、窗口、连接等。

淘宝、京东这样的线上商城网站会通过用户过去的一些行为(点击、浏览、购买等)来和相似的用户计算用户相似度,以此来给用户推荐可能感兴趣的商品。

下图展示了常见推荐系统的工作流程。

  1. 将用户的点击流数据发送到 Kafka 中。
  2. Flink 读取 Kafka 中的流数据实时写入数据湖中其进行聚合处理。
  3. 机器学习使用来自数据湖的聚合数据进行训练,算法工程师也会对推荐模型进行调整。

这样推荐系统就能够持续改进对每个用户的推荐相关性。

image.png

3. 系统监控与报警

Kafka 常用于传输监控指标数据。例如,大一点的分布式系统中有数百台服务器的 CPU 利用率、内存使用情况、磁盘使用率、流量使用等指标可以发布到 Kafka。然后,监控应用程序可以使用这些指标来进行实时可视化、警报和异常检测。

下图展示了常见监控报警系统的工作流程。

  1. 采集器(agent)读取购物车指标发送到 Kafka 中。
  2. Flink 读取 Kafka 中的指标数据进行聚合处理。
  3. 实时监控系统和报警系统读取聚合数据作展示以及报警处理。

image.png

4. CDC(数据变更捕获)

CDC(数据变更捕获)用来将数据库中的发生的更改以流的形式传输到其他系统以进行复制或者缓存以及索引更新等。

Kafka 中有一个连接器组件可以支持 CDC 功能,它需要和具体的数据源结合起来使用。数据源可以分成两种:源数据源( data source ,也叫作“源系统”)和目标数据源( Data Sink ,也叫作“目标系统”)。Kafka 连接器和源系统一起使用时,它会将源系统的数据导人到 Kafka 集群。Kafka 连接器和目标系统一起使用时,它会将 Kafka 集群的数据导人到目标系统。

下图展示了常见 CDC 系统的工作流程。

  1. 源数据源将事务日志发送到 Kafka。
  2. Kafka 的连接器将事务日志写入目标数据源。
  3. 目标数据源包含 ElasticSearch、Redis、备份数据源等。

image.png

5. 系统迁移

Kafka 可以用来作为老系统升级到新系统过程中的消息传递中间件(Kafka),以此来降低迁移风险。

例如,在一个老系统中,有购物车 V1、订单 V1、支付 V1 三个服务,现在我们需要将订单 V1 服务升级到订单 V2 服务。

下图展示了老系统迁移到新系统的工作流程。

  1. 先将老的订单 V1 服务进行改造接入 Kafka,并将输出结果写入 ORDER 主题。
  2. 新的订单 V2 服务接入 Kafka 并将输出结果写入 ORDERNEW 主题。
  3. 对账服务订阅 ORDER 和 ORDERNEW 两个主题并进行比较。如果它们的输出结构相同,则新服务通过测试。

image.png

6. 事件溯源

事件溯源是 Kafka 在微服务架构中的重要应用场景之一。可以用 Kafka 记录微服务间的事件,如订单创建、支付完成、发货通知等。这些事件可以被其他微服务订阅和消费,实现业务逻辑的协调和同步。

简单来说事件溯源就是将这些事件通过持久化存储在 Kafka 内部。如果发生任何故障、回滚或需要重放消息,我们都可以随时重新应用 Kafka 中的事件。

7. 消息队列

Kafka 最常见的应用场景就是作为消息队列。 Kafka 提供了一个可靠且可扩展的消息队列,可以处理大量数据。

Kafka 可以实现不同系统间的解耦和异步通信,如订单系统、支付系统、库存系统等。在这个基础上 Kafka 还可以缓存消息,提高系统的可靠性和可用性,并且可以支持多种消费模式,如点对点或发布订阅。

参考资料

总结

自此本文介绍了 Kafka 在分布式系统中的 7 大应用场景,感谢大家阅读。

目录
相关文章
|
2天前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
17 5
|
9天前
|
NoSQL Java Redis
京东双十一高并发场景下的分布式锁性能优化
【10月更文挑战第20天】在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。
29 1
|
14天前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
22天前
|
消息中间件 分布式计算 监控
大数据-78 Kafka 集群模式 集群的应用场景与Kafka集群的搭建 三台云服务器
大数据-78 Kafka 集群模式 集群的应用场景与Kafka集群的搭建 三台云服务器
42 6
|
22天前
|
消息中间件 NoSQL Kafka
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
54 5
|
22天前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
40 4
|
2月前
|
存储 NoSQL Java
分布式session-SpringSession的应用
Spring Session 提供了一种创建和管理 Servlet HttpSession 的方案,默认使用外置 Redis 存储 Session 数据,解决了 Session 共享问题。其特性包括:API 及实现用于管理用户会话、以应用容器中性方式替换 HttpSession、简化集群会话支持、管理单个浏览器实例中的多个用户会话以及通过 headers 提供会话 ID 以使用 RESTful API。Spring Session 通过 SessionRepositoryFilter 实现,拦截请求并转换 request 和 response 对象,从而实现 Session 的创建与管理。
分布式session-SpringSession的应用
|
2月前
|
存储 NoSQL Java
分布式session-SpringSession的应用
Spring Session 提供了一种创建和管理 Servlet HttpSession 的方案,默认使用外置 Redis 存储 Session 数据,解决 Session 共享问题。其主要特性包括:提供 API 和实现来管理用户会话,以中立方式替换应用程序容器中的 HttpSession,简化集群会话支持,并在单个浏览器实例中管理多个用户会话。此外,Spring Session 允许通过 headers 提供会话 ID 以使用 RESTful API。结合 Spring Boot 使用时,可通过配置 Redis 依赖和支持缓存的依赖实现 Session 共享。
分布式session-SpringSession的应用
|
21天前
|
缓存 网络协议 API
分布式系统应用之服务发现!
分布式系统应用之服务发现!

热门文章

最新文章