高吞吐与低延迟的博弈:Kafka与RabbitMQ数据管道实战指南
摘要
本文全面对比Apache Kafka与RabbitMQ在数据管道中的设计哲学、核心差异及协同方案。结合性能指标、应用场景和企业级实战案例,揭示Kafka在高吞吐流式处理中的优势与RabbitMQ在复杂路由和低延迟传输方面的独特特点;介绍了使用Java生态成熟第三方库(如Apache Kafka Client、Spring Kafka、RabbitMQ Java Client、Spring AMQP等)的快速集成与性能调优方法。通过流程图、表格化分析和代码实例,提供从技术选型到全链路集成的完整实践指南,帮助开发者构建高效、弹性的数据管道系统。
关键词: Kafka、RabbitMQ、数据管道、实时处理、系统集成
一、Kafka vs RabbitMQ:核心差异与设计哲学
1.1 架构模型:日志流 vs 消息代理
特性 | Kafka | RabbitMQ |
---|---|---|
架构类型 | 分布式提交日志(Commit Log) | AMQP消息代理 |
数据存储 | 持久化日志,支持历史数据回溯 | 内存和磁盘结合,消息一般立即消费 |
消息处理 | 顺序写入,批量处理与零拷贝优化 | 路由与消息确认机制丰富 |
路由机制 | Topic+Partition,路由简单 | Exchange+Queue,支持复杂路由规则 |
典型应用 | 大数据流式处理、事件溯源、流量削峰 | 实时交易、复杂路由、微服务解耦 |
可靠性 | 高(多副本、确认机制) | 高(消息确认、事务和死信队列支持) |
1.2 性能对比与混合策略
参数 | Kafka | RabbitMQ | 混合架构方案 |
---|---|---|---|
吞吐量 (msg/s) | ≈1,000,000+ | 4,000 - 10,000 | 约85% Kafka峰值 |
延迟 | 毫秒级 | 微秒级 | 中低延迟混合方案 |
持久性 | 高(日志持久化) | 中(内存与磁盘结合,无日志机制) | 高,结合两者优势 |
路由复杂度 | 低(Topic分区) | 高(Exchange绑定关系复杂) | 复杂路由前端RabbitMQ,批处理后端Kafka |
二、场景适配:何时选Kafka?何时用RabbitMQ?
2.1 Kafka黄金场景
- 大规模流数据处理:电商用户行为日志实时采集,需处理TB级数据,保证高吞吐与历史回溯能力。
- 事件溯源与重放:金融、审计等领域的全链路事件记录与回放。
- 流量削峰:秒杀、高并发场景下缓冲突发流量,防止后端系统崩溃。
2.2 RabbitMQ核心战场
- 复杂路由:物联网设备分类转发、微服务异步通信。
- 低延迟事务处理:支付订单状态同步、实时通知等毫秒响应场景。
- 系统解耦:模块间异步消息传递,保障高可用和松耦合架构。
2.3 技术选型决策矩阵
需求维度 | Kafka评分 (1-5) | RabbitMQ评分 (1-5) |
---|---|---|
实时处理能力 | 5 | 5 |
大规模数据流 | 5 | 3 |
异步任务队列 | 3 | 5 |
复杂路由 | 2 | 5 |
三、协同作战:混合架构方案
3.1 集成方案设计流程图
说明:
- RabbitMQ承担前端实时消息路由与事务确认,保证低延迟高可靠。
- Kafka实现后端大数据持久化和流式批处理,支持历史数据回溯。
- Kafka Connect桥接两者,实现消息同步。
3.2 企业案例:电商库存管理
挑战 | 方案描述 | 成果 |
---|---|---|
实时库存状态刷新 | 订单事件先通过RabbitMQ按区域分发库存服务 | 实时库存更新延迟<10ms |
大数据统计与趋势分析 | 使用Kafka Connect同步RabbitMQ消息到Kafka批量分析系统 | 日均订单处理量提升300%,保障高并发稳定性 |
3.3 企业实践参考
- 华为:实时监控及报警用RabbitMQ,日志及事件流用Kafka,实现低延迟与高吞吐互补。
- LinkedIn:依赖Kafka进行大规模流处理,同时用定制桥接方案对接RabbitMQ满足部分低延迟业务。
- 支付系统案例:RabbitMQ实时传递交易状态,Kafka离线做风险评估,保障数据完整性及系统高可靠。
四、Java生态与第三方库集成实践
4.1 Apache Kafka Client与Spring Kafka
- 直接使用官方Kafka Client实现高灵活性。
- Spring Kafka提供自动管理消费者组,简化事务及重试配置。
Spring Kafka生产者配置示例
@Configuration
@EnableKafka
public class KafkaProducerConfig {@Beanpublic ProducerFactory<String, String> producerFactory() {Map<String, Object> props = new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "broker1:9092,broker2:9092");props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);props.put(ProducerConfig.ACKS_CONFIG, "all");return new DefaultKafkaProducerFactory<>(props);}@Beanpublic KafkaTemplate<String, String> kafkaTemplate() {return new KafkaTemplate<>(producerFactory());}
}
消费者示例
@Component
public class KafkaConsumerListener {@KafkaListener(topics = "order_topic", groupId = "order_group")public void listen(String message) {System.out.println("Received Message: " + message);}
}
4.2 RabbitMQ Java Client与Spring AMQP
- RabbitMQ Java Client提供底层API控制。
- Spring AMQP支持注解驱动配置,支持死信队列、延迟队列等高级特性。
Spring AMQP配置示例
@Configuration
public class RabbitMQConfig {@Beanpublic Queue orderQueue() {return new Queue("order_queue", true);}@Beanpublic DirectExchange exchange() {return new DirectExchange("order_exchange");}@Beanpublic Binding binding(Queue orderQueue, DirectExchange exchange) {return BindingBuilder.bind(orderQueue).to(exchange).with("order.key");}@Beanpublic RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate template = new RabbitTemplate(connectionFactory);template.setMandatory(true);return template;}
}
消费者示例
@Component
public class OrderMessageListener {@RabbitListener(queues = "order_queue")public void receiveMessage(String message) {System.out.println("Received Order Message: " + message);}
}
五、性能调优与陷阱规避
5.1 Kafka调优要点
- 分区策略:合理设置分区数,防止数据倾斜。
- 批处理参数:"batch.size"与"linger.ms"需平衡吞吐与延迟。
- 压缩算法:Snappy、LZ4等提升网络利用。
- 副本配置:合理副本数确保数据安全。
- 监控告警:结合Prometheus与Grafana监控Broker延迟、积压等指标。
5.2 RabbitMQ调优与常见问题
- 避免队列积压:通过TTL限制消息存留,启用死信队列防止内存爆满。
- 镜像队列:提高可用性但带来复制开销。
- 消息确认与幂等性:避免重复消费导致数据不一致。
六、总结与未来展望
- Kafka以分布式日志模型与高吞吐能力,适合大规模流式数据处理和事件溯源。
- RabbitMQ在复杂路由、低延迟及实时事务上表现优异,实现服务解耦。
- 混合使用Kafka与RabbitMQ,可实现低延迟路由与高吞吐处理的互补优势。
- 未来,结合Serverless自动化运维和智能数据流分析,数据管道系统将更智能、自适应。
附录:引用文献
- Data Pipeline Integrating Apache Kafka and RabbitMQ
- RabbitMQ与Apache Kafka Connect的集成和数据管道
- Kafka vs. RabbitMQ: Comparing Features and Use Cases
- 华为技术框架:消息服务场景解析
- 腾讯云 Kafka核心原理
如需更深入的图示或代码示例,欢迎继续提问!
相关文章:
高吞吐与低延迟的博弈:Kafka与RabbitMQ数据管道实战指南
摘要 本文全面对比Apache Kafka与RabbitMQ在数据管道中的设计哲学、核心差异及协同方案。结合性能指标、应用场景和企业级实战案例,揭示Kafka在高吞吐流式处理中的优势与RabbitMQ在复杂路由和低延迟传输方面的独特特点;介绍了使用Java生态成熟第三方库&…...
C++23 views::slide (P2442R1) 深入解析
文章目录 引言C20 Ranges库回顾什么是Rangesstd::views的作用 views::slide 概述基本概念原型定义辅助概念工作原理代码示例输出结果 views::slide 的应用场景计算移动平均值查找连续的子序列 总结 引言 在C的发展历程中,每一个新版本都会带来一系列令人期待的新特…...
SpringDataRedis的入门案例,以及RedisTemplate序列化实现
目录 SpringDataRedis 简单介绍 入门案例 RedisTemplate序列化方案 方案一: 方案二: SpringDataRedis 简单介绍 提供了对不同Redis客户端的整合(Lettuce和Jedis) 提供了RedisTemplate统一API来操作Redis 支持Redis的发布订阅模型 支持Redis哨兵和Redis集群 支持基于…...
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
list列表是开发中不可获取的,非常常用的组件,使用过程中会需要不断的优化,接下来我会用几篇文章进行list在纯原生的纯血鸿蒙的不断优化。我想进大厂,希望某位大厂的看到后能给次机会。 首先了解一下lazyforeach: Laz…...
【Jenkins简单自动化部署案例:基于Docker和Harbor的自动化部署流程记录】
摘要 本文记录了作者使用Jenkins时搭建的一个简单自动化部署案例,涵盖Jenkins的Docker化安装、Harbor私有仓库配置、Ansible远程部署等核心步骤。通过一个SpringBoot项目 (RuoYi) 的完整流程演示,从代码提交到镜像构建、推送、滚动更新,逐步实…...
【愚公系列】《Manus极简入门》034-跨文化交流顾问:“文化桥梁使者”
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
数字滤波器应用介绍
此示例说明如何设计、分析数字过滤器并将其应用于数据。它将帮助您回答以下问题: 如何补偿滤波器引入的延迟?如何避免使信号失真?如何从信号中删除不需要的内容?如何微分信号?以及积分信号文章目录 补偿筛选引入的延迟补偿恒定滤波器延迟 如FIR引起的消除方法,末尾添零补…...
木马查杀篇—Opcode提取
【前言】 介绍Opcode的提取方法,并探讨多种机器学习算法在Webshell检测中的应用,理解如何在实际项目中应用Opcode进行高效的Webshell检测。 Ⅰ 基本概念 Opcode:计算机指令的一部分,也叫字节码,一个php文件可以抽取出…...
栈和队列复习(C语言版)
目录 一.栈的概念 二.栈的实现 三.队列的概念 四.队列的实现 五.循环队列的实现 一.栈的概念 可以将栈抽象地理解成羽毛球桶,或者理解成坐直升电梯;最后一个进去的,出来时第一个出来,并且只有一个出入口。这边需要注意的是&am…...
SDK does not contain ‘libarclite‘ at the path
Xcode16以上版本更新SDK之后就报错了。是因为缺少libarclite_iphoneos.a文件。所以需要在网上找一下该文件根据路径添加进去,arc文件可能需要新建一下。 clang: error: SDK does not contain ‘libarclite’ at the path ‘/Applications/Xcode.app/Contents/Develo…...
Kotlin跨平台Compose Multiplatform实战指南
Kotlin Multiplatform(KMP)结合 Compose Multiplatform 正在成为跨平台开发的热门选择,它允许开发者用一套代码构建 Android、iOS、桌面(Windows/macOS/Linux)和 Web 应用。以下是一个实战指南,涵盖核心概念…...
Oracle数据库全局性HANG的处理过程
如果Oracle数据库全局性HANG,首先要做的就是收集数据库HANG时的状态,只有收集到了相应状态,抓住故障现场,才可以进一步分析故障产生的可能原因。 出现此故障,一般情况下可以如此处理: 如果数据库是单节点&a…...
MySQL 8.0 OCP(1Z0-908)英文题库(21-30)
目录 第21题题目分析正确答案 第22题题目分析正确答案 第23题题目分析正确答案 第24题题目分析正确答案 第25题题目分析正确答案 第26题题目分析正确答案 第27题题目分析正确答案 第28题题目分析正确答案 第29题题目分析正确答案 第30题题目解析正确答案 第21题 Choose three.…...
beyond compare 免密钥进入使用(删除注册表)
beyond compare 免密钥进入,免费使用(删除注册表) 温馨提醒:建议仅个人使用,公司使用小心律师函警告! 1.winr 输入regedit 打开注册表 2.删除计算机 \HKEY_CURRENT_USER\Software\Scooter Software\Beyo…...
前端项目2-01:个人简介页面
目录 一.代码显示 二.效果图 三.代码分析 1. 文档声明和 HTML 基本结构 2. CSS 样式部分 全局样式 body 样式 页面主要容器 box 样式 左侧区域 l 样式 右侧区域 r 样式 左侧区域中头像容器 to 样式 头像图片样式及悬停效果 左侧区域中个人信息容器 tit 样式 个人…...
.NET 8 API 实现websocket,并在前端angular实现调用
.NET 8 API 实现websocket,并在前端angular实现调用。 后端:.NET 8 WebSocket API 实现 在 .NET 8 中,可以通过 Microsoft.AspNetCore.WebSockets 提供的支持来实现 WebSocket 功能。以下是创建一个简单的 WebSocket 控制器的步骤。 安装必…...
P2P架构
P2P 是 Peer-to-Peer(点对点) 的缩写,是一种 去中心化 的网络架构,其中每个节点(称为 “对等节点”,Peer)既是 “客户端”,也是 “服务器”,可以直接与其他节点通信、共享…...
菊厂0510面试手撕题目解答
题目 输入一个整数数组,返回该数组中最小差出现的次数。 示例1:输入:[1,3,7,5,9,12],输出:4,最小差为2,共出现4次; 示例2:输入:[90,98,90,90,1,1]…...
【25软考网工】第六章(4)VPN虚拟专用网 L2TP、PPTP、PPP认证方式;IPSec、GRE
博客主页:christine-rr-CSDN博客 专栏主页:软考中级网络工程师笔记 大家好,我是christine-rr !目前《软考中级网络工程师》专栏已经更新二十多篇文章了,每篇笔记都包含详细的知识点,希望能帮助到你!…...
C语言:深入理解指针(3)
目录 一、数组名的理解 二、用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 八、结语 一、数组名的理解 数组名其实就是首元素的地址 int arr[3] {1,2,3}; printf("arr :%p\n" ,arr); printf(…...
R语言实战第5章(1)
第一部分:数学、统计和字符处理函数 数学和统计函数:R提供了丰富的数学和统计函数,用于执行各种计算和分析。这些函数可以帮助用户快速完成复杂的数学运算、统计分析等任务,例如计算均值、方差、相关系数、进行假设检验等。字符处…...
Lodash isEqual 方法源码实现分析
Lodash isEqual 方法源码实现分析 Lodash 的 isEqual 方法用于执行两个值的深度比较,以确定它们是否相等。这个方法能够处理各种 JavaScript 数据类型,包括基本类型、对象、数组、正则表达式、日期对象等,并且能够正确处理循环引用。 1. is…...
探索边缘计算:赋能物联网的未来
摘要 随着物联网(IoT)技术的飞速发展,越来越多的设备接入网络,产生了海量的数据。传统的云计算模式在处理这些数据时面临着延迟高、带宽不足等问题,而边缘计算的出现为解决这些问题提供了新的思路。本文将深入探讨边缘…...
Ubuntu中配置【Rust 镜像源】
本篇主要记录Ubuntu中配置Rust编程环境时,所需要做的镜像源相关的配置 无法下载 Rust 工具链 通过环境变量指定 Rust 的国内镜像源(如中科大或清华源)。 方法一:临时设置镜像 export RUSTUP_DIST_SERVERhttps://mirrors.ustc.e…...
netty 客户端发送消息服务端收到消息无法打印,springBoot配合 lombok使用@Slf4j
netty 客户端发送消息服务端收到消息无法打印,springBoot配合 lombok使用Slf4j 服务端代码 Slf4j public class EventLoopServer {public static void main(String[] args) throws InterruptedException {new ServerBootstrap().group(new NioEventLoopGroup()).c…...
学习笔记:黑马程序员JavaWeb开发教程(2025.4.3)
12.1 基础登录功能 EmpService中的login方法,是根据接收到的用户名和密码,查询时emp数据库中的员工信息,会返回一个员工对象。使用了三元运算符来写返回 Login是登录,是一个业务方法,mapper接口是持久层,是…...
Spark SQL 运行架构详解(专业解释+番茄炒蛋例子解读)
1. 整体架构概览 Spark SQL的运行过程可以想象成一个"SQL查询的加工流水线",从原始SQL语句开始,经过多个阶段的处理和优化,最终变成分布式计算任务执行。主要流程如下: SQL Query → 解析 → 逻辑计划 → 优化 → 物理…...
【时时三省】(C语言基础)字符数组的输入输出
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 字符数组的输入输出可以有两种方法。 ( 1 )逐个字符输入输出。用格式符“% c”输入或输出一个字符. ( 2 )将整个字符串一次输入或输出。用“% s”格式符,意思是对字符串( strin…...
Hive HA配置高可用
Hive的高可用性(HA)通过消除关键组件的单点故障来实现,确保系统在部分故障时仍能正常运行。其基本原理涉及以下核心组件和策略: 1. Hive Metastore 的高可用 多实例部署:部署多个Metastore服务实例,每个实例连接到共享的后端数据库(如MySQL、PostgreSQ…...
Python爬虫第20节-使用 Selenium 爬取小米商城空调商品
目录 前言 一、 本文目标 二、环境准备 2.1 安装依赖 2.2 配置 ChromeDriver 三、小米商城页面结构分析 3.1 商品列表结构 3.2 分页结构 四、Selenium 自动化爬虫实现 4.1 脚本整体结构 4.2 代码实现 五、关键技术详解 5.1 Selenium 启动与配置 5.2 页面等待与异…...
重构金融数智化产业版图:中电金信“链主”之道
近日,《商学院》杂志独家专访了中电金信常务副总经理(主持经营工作)冯明刚,围绕“金融科技”“数字底座”“架构转型”“AI驱动”等议题,展开了一场关于未来架构、技术变革与系统创新的深入对话。 当下,数字…...
笔记本电脑升级实战手册【扩展篇1】:flash id查询硬盘颗粒
文章目录 前言:一、硬盘颗粒介绍1、MLC(Multi-Level Cell)2、TLC(Triple-Level Cell)3、QLC(Quad-Level Cell) 二、硬盘与主控1、主控介绍2、主流主控厂家 三 、硬盘颗粒查询使用flash id工具查…...
文档外发安全:企业数据防护的最后一道防线
在当今数字化时代,数据已成为企业最宝贵的资产之一。随着网络安全威胁日益增多,企业安装专业加密软件已从"可选"变为"必选"。本文将全面分析企业部署华途加密解决方案后获得的各项战略优势。 一、数据安全防护升级 核心数据全面保护…...
springboot集成langchain4j实现票务助手实战
前言 看此篇的前置知识为langchain4j整合springboot,以及springboot集成langchain4j记忆对话。 Function-Calls介绍 langchain4j 中的 Function Calls(函数调用)是一种让大语言模型(LLM)与外部工具(如 A…...
ZYNQ笔记(二十一): VDMA HDMI 彩条显示
版本:Vivado2020.2(Vitis) 任务:实现驱动 HDMI 显示彩条图像,同时支持输出给 HDMI 的图像分辨率可调。 目录 一、介绍 二、硬件设计 (1)DVI_Transmitter (2)Clockin…...
常用的maven插件及其使用指南
目录 1.maven官方插件列表2.两种方式调用maven插件3.常用的maven插件总结参考文献 1.maven官方插件列表 groupId为org.apache.maven.pluginshttp://maven.apache.org/plugins/index.html 2.两种方式调用maven插件 将插件目标与生命周期阶段绑定,例如maven默认将m…...
Meilisearch 安装
1.环境 rockey linux 9.2 meilisearch-linux-amd64 2.下载 访问:https://github.com/meilisearch/meilisearch/releases 下载适合自己系统版本的。 注意:我下载的不是最新版本的,因为最新版本的需要GLIBC2.35,我本地系统的是…...
用postman的时候如何区分服务器还是自己的问题?
作为测试人员,在使用Postman进行接口测试时,准确判断问题是出在服务器端还是本地环境非常重要。以下是一些实用的区分方法: 1. 基础检查方法 本地问题排查清单: ✅ 检查网络连接是否正常 ✅ 确认Postman版本是否为最新 ✅ 验证请求URL是否正确(特别是环境变量是否被正确…...
【Python算法】最长递增子序列
题目链接 方法1: 记忆化搜索 class Solution:def lengthOfLIS(self, nums: List[int]) -> int:cachedef dfs(i):res0 for j in range(i):if nums[j]<nums[i]:res max(res,dfs(j))return res1 # 返回res表示以nums[i]结尾的LIS长度return max(dfs(i) for i…...
springboot-web基础
21.web spring MVC 基于浏览器的 B/S 结构应用十分流行。Spring Boot 非常适合 Web 应用开发。可以使用嵌入式 Tomcat、Jetty、 Undertow 或 Netty 创建一个自包含的 HTTP 服务器。一个 Spring Boot 的 Web 应用能够自己独立运行,不依赖需 要安装的 Tomcat&#x…...
解构赋值
【系统学习ES6】 本专题旨在对ES6的常用技术点进行系统性梳理,帮助大家对其有更好的掌握,希望大家有所收获。 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。解构是一种打破数据结构&#x…...
Leetcode-BFS问题
LeetCode-BFS问题 1.Floodfill问题 1.图像渲染问题 [https://leetcode.cn/problems/flood-fill/description/](https://leetcode.cn/problems/flood-fill/description/) class Solution {public int[][] floodFill(int[][] image, int sr, int sc, int color) {//可以借助另一…...
AI 时代 UI 设计的未来范式
在人工智能技术持续突破的浪潮下,UI 设计领域正经历着前所未有的变革。AI 的深度介入不仅重塑了设计流程,更催生了全新的设计范式,为用户带来颠覆式的交互体验。探索 AI 时代 UI 设计的未来范式,是把握行业发展趋势的关键所在。…...
键盘输出希腊字符方法
在不同操作系统中,输出希腊字母的方法有所不同。以下是针对 Windows 和 macOS 系统的详细方法,以及一些通用技巧: 1.Windows 系统 1.1 使用字符映射表 字符映射表是一个内置工具,可以方便地找到并插入希腊字母。 • 步骤…...
[数据结构高阶]并查集初识、手撕、可以解决哪类问题?
标题:[数据结构高阶]并查集初识、手撕、可以解决哪类问题? 水墨不写bug 文章目录 一、认识并查集二、模拟实现并查集三、用并查集解决问题1、[省份的数量](https://leetcode.cn/problems/number-of-provinces/)2、[等式方程的可满足性](https://leetcode…...
BUUCTF——PYWebsite
BUUCTF——PYWebsite 进入靶场 看看基本信息 没有什么信息 扫个目录看看 http://node5.buuoj.cn:28115/.DS_Store http://node5.buuoj.cn:28115/flag.php http://node5.buuoj.cn:28115/index.html访问flag.php 提示保存购买者的IP 抓包看看 直接XFF伪造一下 X-Forwarded-F…...
【学习笔记】机器学习(Machine Learning) | 第六章(2)| 过拟合问题
机器学习(Machine Learning) 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习(Machine Learning)简要声明 解决过拟合问题一、收集更多训练数据二、选择特征三、正则化四、过拟合解决方法总结 过…...
单片机-STM32部分:13-1、编码器
飞书文档https://x509p6c8to.feishu.cn/wiki/BpEywhaX9iqbiLkdqdAcmDnwnab EC旋转编码器 在产品开发过程中,需要位置闭环的的产品,类似电机类产品来说,编码器至关重要,它不仅可以使我们对带年纪进行精确的速度闭环,位…...
浅谈大语言模型原理
1.反向传播算法 背景 反向传播算法是当前深度学习的核心技术。 神经网络 x是输入,o是输出,w是需要训练的参数(w有初始值)三层全连接的神经网络:输入层、隐藏层、输出层 激活函数 f ( x ) 1 1 x − 1 f(x)\frac…...
设计模式之中介者模式
在我们实际开发中,我们经常会遇到多个对象之间互相依赖、互相调用的场景。如果这些对象之间的耦合度太高,不仅会让系统变得难以维护,还会让扩展变得异常困难。此时,中介者模式(Mediatro)就是一种非常实用的设计方案,它…...