架构必备能力——kafka的选型对比及应用场景

news2025/2/26 0:30:40

系列文章目录

上手第一关,手把手教你安装kafka与可视化工具kafka-eagle
Kafka是什么,以及如何使用SpringBoot对接Kafka



在这里插入图片描述
在现代大数据架构中,消息队列是不可或缺的一部分。前面我们介绍了Kafka是一种高吞吐量,低延迟的分布式消息队列系统,因其可靠性、可扩展性和灵活性而备受欢迎。本篇博客将比较Kafka与主流竞品之间的差异,并列出Kafka的典型应用场景以及与竞争对手相比的优势

📕作者简介:战斧,从事金融IT行业,有着多年一线开发、架构经验;爱好广泛,乐于分享,致力于创作更多高质量内容
📗本文收录于 kafka 专栏,有需要者,可直接订阅专栏实时获取更新
📘高质量专栏 云原生、RabbitMQ、Spring全家桶 等仍在更新,欢迎指导
📙Zookeeper Redis dubbo docker netty等诸多框架,以及架构与分布式专题即将上线,敬请期待


一、Kafka的模型与优势

1. Kafka 模型

在Kafka中,有几个主要的概念需要了解,包括broketopicpartition

  • Broker
    Broker是Kafka集群中的一个节点,可以理解为是一个Kafka实例,一个Kafka集群由多个Broker组成。Broker负责存储数据,处理客户端的请求,以及协调分布式环境下的各种工作。

  • Topic
    Topic是Kafka中消息的基本单位,相当于消息的分类。每个Topic包含了若干个消息,这些消息被存储在Broker中的一个或多个Partition中。一个Topic可以有多个Partition,同时每个Partition只能属于一个Topic。Topic名称是一个字符串,通常表示Topic所代表的业务或功能,例如"order"、"log"等等。

  • Partition
    Partition是Kafka中的一个概念,表示一个物理上的存储单元。一个Topic可以被分割成多个Partition,每个Partition可以存储一定数量的消息。Partition中的消息是有序的,每个消息都有一个唯一的编号,称为Offset。Offset是Partition中消息的唯一标识符,客户端可以根据Offset从Partition中读取消息。

在这里插入图片描述
当然,Partition 其实也分种类,有着主备关系。如上图,Partition1 在 Broker1中是主分区(Leader)用实线表示。在其他分区中也有Partition1 ,但都是备份(follower),用虚线表示

2. Kafka 优势

不难看出,Kafka的设计很像分布式文件系统,因为天然就是要多个Broker节点,所以具有很大的吞吐能力。再加上可选数量的备份,配合以高效的数据存储,使得其有很强的性能,我们可以总结一下Kafka的几项优势

在这里插入图片描述

  1. 高吞吐率
    Kafka的高吞吐率是其最为突出的优势。在Kafka的设计中,每个分区都有多个副本,如果需要,每个副本都可以独立地对外提供服务。这种设计使得Kafka能够轻松地扩展到数千个节点,从而实现高吞吐率的数据传输。此外,Kafka支持批量消息传送,可以将小消息合并为一个大的批处理消息,从而减少网络传输的开销。

  2. 可靠性高
    Kafka的分布式设计和多副本机制可以保证数据的高可靠性。每个分区都有多个副本,一旦某个副本出现故障,其他副本会自动接管服务。此外,Kafka支持消息的持久化存储,即使出现消息传输中断或节点崩溃,也可以在节点恢复后重新传输数据。

  3. 灵活性高
    Kafka的灵活性也是其优势之一。Kafka不仅能够作为消息中间件,还可以作为日志收集和数据处理的平台。此外,Kafka的存储模型很灵活,支持多种不同的数据类型和格式,可以自定义消息格式和处理逻辑。

当然,除了性能优异,Kafka 的生态系统也很丰富,有多种不同的消费者和生产者客户端,支持多种编程语言,例如Java、Python和Go等。此外,Kafka还提供了Kafka ConnectKafka Streams API,可以将Kafka与不同的外部系统集成,并且支持实时数据处理和流式计算。

二、Kafka与竞争对手的区别

1. 与RabbitMQ相比

在之前的文章《消息队列选型——为什么选择RabbitMQ》 中,其实我们已经对Kafka RabbitMQ进行了一些对比,这里我把当时的对比表格再放出来:

对比项

RabbitMQ是一个流行的AMQP消息代理,可提供很好的消息传递性能,还可以在高可靠性和事务性方面提供更好的支持。然而,相对于Kafka,RabbitMQ在可扩展性和处理大量数据时的性能方面不够强大。但是,对于许多大数据应用程序来说,Kafka的可扩展性性能优势使其成为更好的选择。

2. 与ActiveMQ相比

ActiveMQ是Apache旗下的分布式消息代理,可提供良好的Java集成和可靠性。

对比项ActiveMQKafka
应用场景应用于企业内部的消息传递、集成、异步通信等应用于大规模数据处理、流式计算等
消息存储模式消息被发送到队列或主题,存储在磁盘上消息以分区的方式存储在Kafka集群的磁盘上
消息消费消息被消费后会被删除消息被消费后不会立即删除,而是根据设置的保留时间保留在磁盘上
吞吐量吞吐量相对较低吞吐量相对较高
可扩展性相对较差相对较好
消息保证支持消息事务,可保证消息的可靠性支持至少一次消息传递,不保证消息的可靠性
消息顺序保证支持消息顺序保证支持基于分区的消息顺序保证
管理维护相对较简单相对较复杂
生态系统生态系统相对较完善生态系统相对较单一
开发难度开发难度相对较大开发难度相对较低
消息传递方式传递方式基于TCP协议传递方式基于TCP协议,支持Zero-copy技术
消息过滤器支持类SQL语言的消息过滤器不支持消息过滤器
消息分发机制消费者需要轮询服务器获取消息消息通过推模式由服务器主动分发给消费者
消息重复消费问题相对较少相对较多

但是,相对于Kafka,ActiveMQ 在处理大量数据时的性能不足,并且在滞后和可扩展性方面也存在问题,这意味着,Kafka 在高性能、大规模数据处理时,具备很强的优势。

3. 与RocketMQ相比

Kafka和RocketMQ都是流行的分布式消息队列系统,它们都可以用于数据传输和处理,他们的一些特征对比如下

特性KafkaRocketMQ
适用场景大规模实时数据处理,高吞吐量,低延迟大规模分布式消息传递和处理
数据模型基于日志的消息传递模型,消息有序基于 JMS 的消息传递模型,支持消息批量发送
存储方式消息使用队列存储,副本机制保证数据可靠性消息使用主题存储,支持多种存储方式
分区设计分布式分区,水平扩展容易分布式分区,支持水平、竖直扩展
性能表现高吞吐量,低延迟,处理大数据流效果更佳处理高并发、大数据流效果更佳
可靠性通过多个副本保证数据可靠性,并具有良好的容错性基于分布式架构,具有较强的可靠性和容错性
社区支持开源社区支持广泛,文档丰富,插件可扩展独立开源社区支持,文档和插件相对较少

总的来说,RocketMQ在性能方面与Kafka相当。至于社区的话,两者现在都是Apache软件基金会的顶级项目,Kafka最初是由LinkedIn公司开发的,而RocketMQ最初是由阿里巴巴公司开发的,但是贡献给了Apache软件基金会稍微晚一些,所以相对活跃度低一些,但其在国内应用很广泛。

4. 与Pulsar对比

Apache Pulsar和Apache Kafka都是可扩展、可靠的流式数据平台。它们都具有高可用性、高并发性和高吞吐量,并支持分布式订阅和发布,他们的一些对比如下:

对比项Apache pulsarKafka
发布时间2017年2011年
语言JavaScala
群集模式多租户无多租户
可伸缩性低延迟和高容量可扩展性极高
事务支持不支持
消息顺序有序有序
多语言客户端支持支持
跨数据中心复制支持支持
批量发送支持支持
多租户安全支持不支持
社区支持相对较新,但增长迅速相对成熟的社区支持
性能Pulsar在延迟、吞吐量和可伸缩性方面表现出色,特别是在多租户和跨数据中心复制方面。Kafka在吞吐量和可伸缩性方面表现出色,是一个可靠而高效的消息传递系统。

总的来说,Apache pulsar和Kafka都是高性能分布式消息传递系统,用于实时数据传输。它们都具有不同的功能和性能特点。Apache pulsar具有更多的功能,例如异地复制、多租户设计等,但Kafka具有更高的性能和更成熟的社区支持。

三、 Kafka的典型应用场景

1. 常用场景

  1. 消息队列
    Kafka可以作为传统消息队列的替代方案。它可以快速传输大量消息,保持消息的可靠性和顺序性,并允许多个消费者读取消息,尽管在MQ功能性上的特点稍逊一筹,相比其他MQ插件,Kafka拥有更好的可扩展性和吞吐量。
    在这里插入图片描述

  2. 日志收集
    Kafka可以作为日志收集的理想平台。由于其可靠性和可扩展性,Kafka可以在数百个服务器上实时收集日志,这些日志可以进行后续处理和分析。Kafka的高效处理能力使其成为收集实时日志的最佳选择。我们在《日志搞不定?手把手教你如何使用Log4j2
    》 里也提到可以配置Appenders将日志传输至Kafka服务器。 相比其他MQ插件,Kafka预设了这种场景,使用更容易,并且能够处理更高的数据量和更快的数据传输速率。
    在这里插入图片描述

  3. 流处理
    Kafka的流处理功能使其成为构建实时处理系统的首选平台。它可以让开发人员通过处理无限流来自动触发和响应事件,并可以在流中使用各种数据处理步骤。与其他MQ插件相比,Kafka使用分布式流处理,可以处理大量的数据并提供更高的可靠性。

  4. 事件驱动
    Kafka可以作为事件驱动架构的后端,帮助处理大量的事件数据,包括用户行为数据、交易数据、日志数据等。相比其他MQ插件,Kafka拥有更好的扩展性和容错性

2. 案例分析

场景: 一个大型电商网站需要实时监控用户的购买行为,以便及时调整商品推荐策略和优惠活动,提高用户购买率。这个网站有数千万的用户和数百万个商品,每秒钟会产生成千上万的购买行为事件,如何高效地收集、处理和分析这些数据,是一个非常具有挑战性的问题。

解决方案: 使用Kafka来搭建一个实时数据处理系统,主要包含以下组件:

1.数据收集:在电商网站的应用程序中,使用Kafka的Producer API将用户的购买行为数据发送到Kafka的Topic中。

2.数据处理:在Kafka的消费者端,运行一个或多个消费者进程来处理数据。消费者进程可以使用Kafka Connect将数据写入到NoSQL数据库、Hadoop集群等数据存储系统中。在处理数据时,消费者需要注意以下几个关键点:

  • 保证数据的可靠性:使用Kafka的消息确认机制来保证数据不会丢失或重复处理。
  • 支持分布式处理:使用Kafka的分区机制来实现高效的水平扩展,并避免单点故障的影响。
  • 时间戳管理:在处理数据时,需要记录数据到Kafka中的时间戳来确保正确性。

3.数据分析:使用实时流处理工具,如Apache StormJStormApache Flink,对数据进行实时分析和处理,并输出结果到实时报表和仪表盘中。在使用这些工具时,需要注意以下几个关键点:

  • 窗口机制:使用窗口机制来控制处理数据的时间段,以便对数据进行聚合、分析和统计。
  • 数据源管理:与Kafka相同,实时流处理工具也需要支持分布式处理,并且可以通过Kafka Connect来实现数据源的管理。
  • 处理结果数据的可视化:使用可视化工具,如Grafana、Kibana等,将处理结果可视化,并输出到实时报表和仪表盘中,便于业务人员和技术人员了解实时数据变化。

总结

经过上述的讲解,我们不难知道Kafka的应用场景非常广泛,你可以只把他当MQ组件,也可以使用它进行日志传输或流处理。它的特点也非常鲜明,就是强大的吞吐量、扩展性和可靠性。当然它与传统MQ组件对比,它在复杂场景下的使用会比较麻烦。但其在大数据领域应用广泛,比如经常作为 Hadoop 的数据源,将数据传输到 Hadoop 中进行存储和处理。

当然,在实际选型中我们往往要考虑更多问题,除了明确需求和场景,还要考虑已用的技术栈情况、开发语言支持、版本更新情况。并没有哪一种框架是万金油。而对于一些要求比较单薄的场景,可能许多的框架都可以满足要求,那么易用和易维护就会成为选型的关键

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1087714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【@胡锡进】大模型量化分析- 南京银行 601009.SH

对于股票价格的预测,以下是几种常见的方法: SARIMA模型:SARIMA(Seasonal Autoregressive Integrated Moving Average)模型适用于具有季节性变动的时间序列数据。它结合了ARIMA模型和季节性差分的方法来预测未来的价格…

axios响应拦截器 路由导航守卫

axios响应拦截器使用场景: 1. 处理全局错误:响应拦截器可以用来统一处理API请求的错误。当后端返回错误状态码,或者响应数据不符合预期时,我们可以在拦截器中进行统一的错误处理逻辑,例如弹窗提示、记录日志等。 2. 统…

倾斜摄影三维模型的顶层构建的问题分析

倾斜摄影三维模型的顶层构建的问题分析 在构建倾斜摄影超大场景的三维模型时,常见的顶层构建问题可能包括以下几个方面: 1、数据质量问题:倾斜摄影所获取的原始数据可能存在噪点、缺失、重叠或者变形等问题,这些问题会直接影响到…

Hadoop问题:start-all.sh显示未找到命令

在sbin文件夹下是start-all.sh可以运行的,但是到了别的文件夹下就不行了,于是想到了是文件路径问题,因为hadoop环境是和java环境一起配置的导致sbin写成了bin 解决办法: 打开.bashrc配置hadoop的环境变量 sudo vim ~/.bashrc …

热电厂蒸汽流量如何无线传输至无纸记录仪上显示?

某数码影像材料制造集团生产目前主要消耗蒸汽和电能源,蒸汽用能情况较为复杂,需要用5公里的蒸汽管线将较远区域某热电厂的蒸汽接入厂内,每周专人巡查一次管线,部分蒸汽管线位置特别偏僻,不易出入。 为了监控蒸汽流量&…

Java NIO到底是个什么东西?

Java NIO到底是个什么东西? 面试官:这次咱们就来聊聊Java 的NIO呗?你对NIO有多少了解? 候选者:嗯,我对Java NIO还是有一定的了解的,NIO是JDK 1.4 开始有的,其目的是为了提高速度。NIO翻译成 n…

GIS地图学知识

一、投影坐标系 "WGS 1984"坐标系墨卡托投影分度带(UTM ZONE)的选择: 北半球区选取最后字母为N的带,带数(经度的整数/6)31,如113.25,34.12中带数(113/6)3149,选取WGS 1984 UTM ZONE 49N 二、投影分带 经度中三度分带投…

Flink测试利器之DataGen初探 | 京东云技术团队

什么是 Flinksql Flink SQL 是基于 Apache Calcite 的 SQL 解析器和优化器构建的,支持ANSI SQL 标准,允许使用标准的 SQL 语句来处理流式和批处理数据。通过 Flink SQL,可以以声明式的方式描述数据处理逻辑,而无需编写显式的代码…

【2023研电赛】商业计划书赛道上海市一等奖:基于双矢量优化谐波预测控制的MMC-PET光伏储能系统

该作品参与极术社区组织的2023研电赛作品征集活动,欢迎同学们投稿,获取作品传播推广,并有丰富礼品哦~ 团队介绍 参赛单位:上海理工大学 参赛队伍:Dream explorers 参赛队员:吕哲 李天皓 赵安杰 项目意义…

基于Springboot实现商务安全邮箱邮件收发系统项目【项目源码+论文说明】计算机毕业设计

基于Springboot实现商务安全邮箱邮件收发系统演示 摘要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。计算机的优势和普及使得商务安全邮箱的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,采用jsp技术…

Allegro芯片引脚如何散出?

在日常进行PCB设计时,遇到有BGA芯片的项目,引脚就需要散出。那么如何散出呢? 需要对引脚进行散出的BGA芯片 下面详细介绍散出方法。 (1)选择菜单Route(布线) (2)选择Create Fanout (3)在选择散出命令后,在Find选项卡,可以选择Symbol(器件)或Pins(引脚)

vscode 右侧滚动条标记不提示,问题解决纪录

问题描述 用vscode看代码时,我希望在右侧提示一个变量在文件下都在那里使用,在那里赋值,之前该功能是存在的,当我打开一个新的文件夹时这个功能消失了。 解决办法 在setting.json文件下输入 "C_Cpp.intelliSenseEngine&…

0基础学习VR全景平台篇 第108篇:全景图细节处理(下,航拍)

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! (调色前图库) (原图-大图) 一、导入文件 单击右下角导入按钮,选择航拍图片所在文件夹,选择图片&#xff0…

土壤水分烘干法流程

土壤水分烘干法流程 叠小盒子装土 对折 得到一个正方形,裁掉多余的。然后将正方形按如下形式折 再次对折 然后再展开,对着折痕,竖立起盒子边缘 把上面的尖角翻下来 最后将多余的长条裁出一个盒子底部大小的小方块,放入盒子…

【教学类-35-04】学号+姓名+班级(中3班)学号字帖(A4竖版2份 竖版长条)

图片展示: 背景需求: 2022年9-2023年1月我去过小3班带班,但是没有在这个班级投放过学具,本周五是我在本学期第一次带中3班,所以提供了一套学号描字帖。先让我把孩子的名字和脸混个眼熟。 之前试过一页两套名字的纸张切割方法有:…

2023年中国缝纫机针行业分类、市场规模及存在问题分析[图]

缝纫机针是指用于缝纫机上的零件,用于穿透和连接不同种类的织物,从而完成缝纫工作。这些针通常由金属制成,具有不同的形状、尺寸和用途,以适应各种缝纫需求,如直线缝、锁边、装饰等。 缝纫机针行业分类 资料来源&…

新风机缺点有哪些?

虽然新风机在提供新鲜空气和改善室内空气质量方面有很多优点,但它也存在一些缺点。下面列举几个常见的新风机缺点: 安装成本较高:新风机需要通过管道连接室内和室外,需要对房屋进行改造和安装。这可能会增加一些额外的安装成本&am…

Dhgate敦煌手机端下单支付测试

1. 打开敦煌首页,点击左上角的图标打开菜单 2. 点击Join Free注册账号。 3. 点击SIGN UP注册账号,填写账号的信息。 4. 填写收货地址后注册完成。 5. 找到自己需要购买的商品,点击进去。 6. 点击Buy it now 7. 选择完颜色 类型后进入下一步。…

缓存设计的创新之旅:架构的灵魂之一

缓存在架构设计中占有重要地位。缓存在提升性能中也扮演重要的角色。常见的有对资源的缓存,比如数据库连接池、http连接池,还有对数据的缓存等。缓存的设计可复杂也可简单,但是需要考虑的点却很多。 缓存对象 设计缓存的时候一定要考虑的是&…

将vue项目打包成安卓app

目标:将vue项目打包成安卓app 工具:HbuilderX 1.在HbuilderX中创建一个 5App 项目 创建好的app项目目录 2.将vue项目打包 2.1 在 vue.config.js 中添加公共路径(解决打包后的app图片不显示问题) module.exports defineConfig(…