RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别
文章目录
- 一、kafka和rabbitmq全面对比分析
- 1.1 简介
- 1.2 kafka和rabbitmq全面对比分析
- 1.3 影响因素
- 二、RabbitMQ、Kafka主要区别
- 2.1 详解/主要区别
- 2.1.1 设计目标和适用场景
- 2.1.2 架构模型方面
- 2.1.3 吞吐量和性能
- 2.1.4 消息存储和持久化
- 2.1.5 消息传递保证
- 2.1.6 集群负载均衡方面
- 2.1.7 生态系统和社区支持
- 2.2 网上介绍较少的
- 2.2.1 消费者端拉取消息的方式不同
- 2.2.2 消息被处理完后的处理方式不同
- 2.2.3 生产者发送消息到broker的方式不同
- 2.2.4 扩展性和分布式特性
- 2.2.5 集群(了解即可,无需掌握)
- 2.3 总结
- 三、Kafka、RabbitMQ、RocketMQ区别
- 3.1 语言与开发背景
- 3.2 吞吐量与性能
- 3.3 可靠性与容错性
- 3.4 使用场景
- 3.5 其他特性
RabbitMQ和Kafka是两种流行的消息传递系统,它们在多个方面存在显著的差异。
- 我们在开发中可能会遇到以下情况:有个xx需求,我应该用Kafka还是RabbitMQ?
- 包括面试时也会经常被问到:Kafka、RabbitMQ有什么区别,为什么A项目选用Kafka、而B项目选用RabbitMQ?
总得来说,我们需要掌握 RabbitMQ 和 Kafka 的区别、适用于什么场景、以及各自的优劣。
一、kafka和rabbitmq全面对比分析
1.1 简介
- kafka是apache开源的消息队列顶级项目之一,在大数据场景下使用较多,由linkedin开源,目前社区活跃,全球较多组织开始使用kafka来进行数据交换。kafka采用mq结构,broker有part分区的概念
- RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的标准实现。RabbitMQ的broker由Exchange、Binding、queue组成。
1.2 kafka和rabbitmq全面对比分析
对比项 | kafka | rabbitmq |
---|---|---|
开发语言 | scala,Java | erlang |
是否支持多租户 | 2.x.x支持多租户 | 支持多租户 |
是否支持topic优先级 | 不支持 | 支持 |
是否支持消息全局有序 | 不支持 | 支持 |
是否支持消息分区有序 | 支持 | 支持 |
是否内置监控 | 无内置监控 | 内置监控 |
是否支持多个生产者 | 一个topic支持多个生产者 | |
是否支持多个消费者 | 一个topic支持多个消费者(一个消费者可消费多个分区,一个分区可被多个消费组消费,但同一消费组内仅能有一个消费者同时消费1个分区) | |
是否支持一个分区多个消费者 | 不支持 | 不支持 |
是否支持JMX | 支持 | 不支持(非java语言编写) |
是否支持加密 | 支持 | 支持 |
消息队列协议支持 | 仅支持自定义协议 | 支持AMQP、MQTT、STOMP协议 |
客户端语言支持 | 支持多语言客户端 | 支持多语言客户端 |
是否支持消息追踪 | 不支持消息追踪 | 支持消息追踪 |
是否支持消费者推模式 | 不支持消费者推模式 | 支持消费者推模式 |
是否支持消费者拉模式 | 支持消费者拉模式 | 支持消费者拉模式 |
是否支持广播消息 | 支持广播消息 | 支持广播消息 |
是否支持消息回溯 | 支持消息回溯,因为消息持久化,消息被消费后会记录offset和timstamp | 不支持,消息确认被消费后,会被删除 |
是否支持消息数据持久化 | 支持消息数据持久 | 支持消息数据持久 |
是否支持消息堆积 | 支持消息堆积,并批量持久化到磁盘 | 支持阈值内的消息对接,无法支持较大的消息堆积 |
是否支持流量控制 | 支持控制用户和客户端流量 | 支持生产者的流量控制 |
是否支持事务性消息 | 支持 | 不支持 |
元数据管理 | 通过zookeeper进行管理 | 支持消息数据持久 |
默认服务端口 | 9092 | 5672 |
默认监控端口 | kafka web console 9000;kafka manager 9000; | 15672 |
网络开销 | 相对较小 | 相对较大 |
内存消耗 | 相对较小 | 相对较大 |
cpu消耗 | 相对较大 | 相对较小 |
kafka支持一个消费者可消费多个分区,同一分区仅支持同一消费组下一个消费者,但支持多个消费组消费。
在公司项目中,一般消息量都不大的情况下,推荐大家可以使用 RabbitMQ。消息量起来了可以考虑切换到 Kafka,但是也要根据公司内部对两种 MQ 的熟悉程度来进行选择,避免 MQ 出现问题时无法及时处理。
1.3 影响因素
- 架构设计:RabbitMQ 的架构是专为复杂的消息路由而设计,RabbitMQ 使用推送模型。生产者可以使用不同的路由规则向使用者发送消息。Kafka 的架构是专为实时、高吞吐量的流处理场景设计,是一种基于分区的设计。Kafka 使用拉取模型,生产者向使用者订阅的主题和分区发布消息。
- 性能:Kafka 的扩展方式是水平扩展(horizontal scaling),即通过增加集群中的节点数来提高性能和容量。因此在处理大容量、高吞吐量和实时数据流上性能优势很大,它每秒能够处理数百万个事件,并且可以处理大量数据。RabbitMQ 的扩展方式是垂直扩展(vertical scaling),即通过增加单个节点的硬件资源来提高性能和容量,因此它受到单个节点性能和容量的瓶颈,在性能方面是不如 Kafka 的。
- 消息延迟:RabbitMQ 使用推送模型(push model),即交换机将消息推送到队列,然后队列将消息推送到消费者,这样可以减少消息在队列中的等待时间,降低延迟;Kafka 使用拉取模型(pull model),即生产者将消息发布到主题,然后消费者从主题拉取消息,这样可以增加消费者对消息的控制力,提高吞吐量,但也会增加延迟。因此在在延迟方面 Kafka 是不如 RabbitMQ 的。
- 消息顺序:Kafka 保证了同一个分区(partition)内的消息是有序的,即按照生产者发送的顺序来存储和消费。但是不同分区之间的消息是无序的,即不能保证跨分区的消息按照全局顺序来处理。 RabbitMQ 保证了同一个队列内的消息是有序的,即按照先进先出(FIFO)的原则来存储和消费。但是不同队列之间的消息是无序的,即不能保证跨队列的消息按照全局顺序来处理。
- 容灾机制:Kafka 通过副本(replica)机制来保证数据的可靠性,即每个主题可以有多个副本分布在不同的节点(broker)上,如果某个节点发生故障,可以自动切换到其他节点继续提供服务。 RabbitMQ 通过镜像(mirror)机制来保证数据的可靠性,即每个队列可以有多个镜像分布在不同的节点上,如果某个节点发生故障,可以自动切换到其他节点继续提供服务。
- 消息持久化:Kafka 将数据持久化到磁盘中,并且支持数据压缩和批量传输,以提高性能和节省空间。Kafka 可以支持 TB 级别甚至 PB 级别的数据存储,并且可以快速地重放历史数据。RabbitMQ 将数据缓存在内存中,并且支持消息确认和事务机制,以提高可靠性和一致性。RabbitMQ 也可以将数据持久化到磁盘中,但是会降低性能和吞吐量。RabbitMQ 更适合处理小规模且实时性较高的数据。
- 消息删除:RabbitMQ 支持消费者确认机制(consumer acknowledgement),即消费者在接收并处理完消息后向队列发送确认信号,队列才会删除该消息,这样可以保证消息的可靠传递;Kafka 不支持消费者确认机制,而是由消费者将消息附加到日志文件中,自己维护一个偏移量来记录已经消费过的消息,主题不会删除任何消息,该日志文件将一直留存到其保留期到期,除非达到预设的保留期限或大小限制。这样消费者可以在规定的时间内随时重新处理流式传输中的历史数据。
- 消息路由:RabbitMQ 支持多种交换机类型,例如直接交换机(direct exchange)、主题交换机(topic exchange)、扇形交换机(fanout exchange)等,以实现不同的消息路由和分发策略;Kafka 不支持消息过滤,而是通过主题和分区来进行消息分类和分发。
- 易用性:RabbitMQ 的安装和配置相对简单,只需要下载安装包并运行即可,也可以通过命令行或图形界面来管理和监控服务器状态;Kafka 的安装和配置相对复杂,需要依赖于 ZooKeeper 服务来协调集群状态,并且需要手动调整一些参数来优化性能和可靠性。因此在易用性上 RabbitMQ 是更简单的。
二、RabbitMQ、Kafka主要区别
2.1 详解/主要区别
2.1.1 设计目标和适用场景
- RabbitMQ:RabbitMQ是一个传统的消息队列系统,采用了基于消息队列的发布-订阅模型
- 设计目标:RabbitMQ的设计目标是确保消息的可靠传递,并提供多种消息传递协议的支持
- 应用场景:通常用于实时的、对可靠性要求较高的消息传递上
- 中小项目,项目消息量小、吞吐量不高、对延时敏感
- 遗留应用,如需要与旧系统或第三方系统进行集成或通信
- 复杂路由,如需要根据不同的规则或条件来分发或过滤消息
- 延迟敏感,对于消费者处理消息的及时性有非常高的要求
- Kafka:Kafka是一个分布式事件流平台,采用了发布-订阅日志模型
- 设计目标:Kafka的设计目标是提供高吞吐量和持久化存储,支持事件溯源、数据湖等长期存储需求
- 应用场景:主要用于处理活跃的流式数据,特别适用于大数据量的数据处理场景。
- 跟踪高吞吐量的活动,如网站点击、应用日志、传感器数据等
- 事件溯源,Kafka 保存着所有历史消息,可以用于事件回溯和审计
- 流式处理,如实时分析、实时推荐、实时报警等
- 日志聚合,如收集不同来源的日志并统一存储和分析
2.1.2 架构模型方面
producer,broker,consumer
- RabbitMQ:
- 以broker为中心,有消息的确认机制(这里的确认机制指的是客户端消费消息的时候)
- broker与consumer交互方式:rabbitmq采用push的方式
- kafka:
- 以consumer为中心,无消息的确认机制(这里的确认机制指的是客户端消费消息的时候)
- broker与consumer交互方式:kafka采用pull的方式
kafka和rabbitMQ都有发送到Broker的确认机制。
2.1.3 吞吐量和性能
- RabbitMQ:支持消息的可靠传递,支持事务,不支持批量操作,基于存储的可靠性的要求存储可以采用内存或硬盘,吞吐量小,在处理大量消息时可能会受限于单一队列的性能瓶颈。如果需要持久化,会采用实时存储
- kafka:内部采用消息的批量处理,数据的存储和获取是本地磁盘顺序批量操作,消息处理的效率高,吞吐量高,这得益于其分布式架构、分区机制以及批量处理等技术。定时持久化存储,非实时持久化储存
2.1.4 消息存储和持久化
- RabbitMQ:RabbitMQ通常保留消息一段时间,然后将其删除。虽然它也支持消息的持久化,但主要是为了确保消息在传递过程中的可靠性,而不是为了长期存储。
- Kafka:Kafka以持久化日志的方式存储消息,允许消息长时间保留。这种设计使得Kafka非常适合用于需要长期存储和回溯消息的场景。
2.1.5 消息传递保证
- RabbitMQ:RabbitMQ提供不同级别的消息传递保证,包括至少一次传递、至多一次传递和确切一次传递。这些保证机制可以根据应用的需求进行配置。
- Kafka:Kafka提供了强大的消息保证,确保消息的持久性、顺序性和可靠性传递。Kafka的分区和副本机制使得即使在节点故障的情况下,也能保证消息的不丢失。
2.1.6 集群负载均衡方面
- RabbitMQ:本身不支持负载均衡,需要loadbalancer的支持。即指定存到哪个broker就是哪个broker
- kafka:采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上,通过zookeeper的协调机制,producer保存对应的topic的broker信息,可以随机或者轮询发送到broker上,producer可以基于语义指定分片,消息发送到broker的某个分片上。即如果不指定分片,就会默认存到master的分片上,然后再同步到其他的分片
2.1.7 生态系统和社区支持
- RabbitMQ:RabbitMQ有一个成熟的生态系统,包括多种客户端库和插件,适用于各种编程语言和应用场景。它拥有广泛的用户群体和活跃的社区支持。
- Kafka:Kafka同样拥有一个庞大的生态系统,特别适用于大规模数据处理和日志管理。Kafka也是Apache软件基金会的一部分,得到了广泛的社区支持和维护。
2.2 网上介绍较少的
2.2.1 消费者端拉取消息的方式不同
- RabbitMQ:采用push的方式,当消息到达队列后,会将消息推到消费者端
- kafka:采用pull的方式,当消息到达队列后,消费者端需要手动从队列拉取消息
2.2.2 消息被处理完后的处理方式不同
- RabbitMQ:被消费者端确认消费了的消息会被从磁盘删除掉
- kafka:消息被消费掉依然保存在磁盘中
2.2.3 生产者发送消息到broker的方式不同
- RabbitMQ:当为主从集群的时候,生产者连接到谁,发送消息就到对应的机器上,其他机器只是存储元数据。消费者连接时,只需要连接任意集群中的任意一台服务器,获取数据时都可以通过元数据经过路由到达实际存储队列消息的那台服务器
- kafka:当生产者发送消息时,必须发送到master分片所在的机器。为了实现这一个功能,kafka在连接集群时,只要连接到任意一台或多台服务器,就可以知道整个集群的情况,其中包含了集群所有机器的ip地址,分片的信息
2.2.4 扩展性和分布式特性
- RabbitMQ:RabbitMQ可以通过集群来水平扩展,但在某些情况下,水平扩展可能不够灵活。它支持多种交换机类型和绑定选项,使得消息可以在多个路由路径中进行传递。
- Kafka:Kafka是天生分布式的,易于水平扩展。它可以在不断增加的负载下轻松添加新的节点,并且支持多个生产者和消费者同时工作。Kafka的分区机制使得消息可以均匀分布在多个节点上,从而提高了系统的整体性能。
2.2.5 集群(了解即可,无需掌握)
- RabbitMQ
- 队列同步发起方(Rabbit使用的镜像集群,非默认的主从集群):镜像队列同步时,由主队列向镜像队列发起
- 副本同步限制:副本队列可以落后主队列很多
- 副本同步对性能的影响(Rabbit使用的镜像集群,非默认的主从集群):新节点加入时,如果ha-sync-mode=manual,则不会手动同步镜像到新节点。如果ha-sync-mode=automatic时,会自动同步到新节点中。在同步新节点时,主节点不会再接收生产者的消息,也不会push消息到消费者,就是一种stop-the-world的状态。如果存量消息过多,则会导致生产者和消费者请求超时,可以使用设置重试规则解决
- Kafka
- 队列同步发起方(Rabbit使用的镜像集群,非默认的主从集群):副本同步时,副本分片由副本分片向主分片发起同步
- 副本同步限制:副本分片只能落后replica.lag.time.max.ms的时间内(ISR),如果超过这个时间,副本分片会被删除掉
- 副本同步对性能的影响(Rabbit使用的镜像集群,非默认的主从集群):新的节点加入,会主动从主分区拉取数据,等待数据拉取完成(不包含未提交的,只包含所有已提交数据)后才把该节点加入到集群中
2.3 总结
RabbitMQ和Kafka在设计目标、消息存储、吞吐量、扩展性、消息传递保证以及生态系统等方面都存在显著的差异。选择哪个系统取决于具体的应用场景和需求。如果需要传递实时数据、低延迟和简单的队列模型,RabbitMQ可能更适合;如果处理大量事件流、需要持久化和高吞吐量,并且希望构建大规模的分布式系统,那么Kafka可能更适合。
- rabbit为了更高的灵活性和信息安全性,放弃了吞吐量
- kafka为了更多的吞吐量,选择了速度,放弃了部分安全性
实际场景选择:在实际生产应用中,通常会使用kafka作为消息传输的数据管道,rabbitmq作为交易数据作为数据传输管道,主要的取舍因素则是是否存在丢数据的可能;rabbitmq在金融场景中经常使用,具有较高的严谨性,数据丢失的可能性更小,同事具备更高的实时性;而kafka优势主要体现在吞吐量上,虽然可以通过策略实现数据不丢失,但从严谨性角度来讲,大不如rabbitmq;而且由于kafka保证每条消息最少送达一次,有较小的概率会出现数据重复发送的情况
在公司项目中,一般消息量都不大的情况下,推荐大家可以使用 RabbitMQ。消息量起来了可以考虑切换到 Kafka,但是也要根据公司内部对两种 MQ 的熟悉程度来进行选择,避免 MQ 出现问题时无法及时处理。
三、Kafka、RabbitMQ、RocketMQ区别
Kafka、RabbitMQ、RocketMQ都是目前广泛使用的消息队列系统,它们在语言、吞吐量、可靠性、使用场景等方面存在一些明显的区别。下面将详细对比这三者的主要差异:
3.1 语言与开发背景
- Kafka:采用Scala语言开发,最初由LinkedIn开发并开源,后来成为Apache软件基金会的一部分。Kafka主要用于处理活跃的流式数据,特别适用于高吞吐量的实时数据流处理和流式处理场景。
- RabbitMQ:由Erlang语言开发,Erlang是一种高并发的编程语言,使得RabbitMQ非常适合用于实时的、对可靠性要求较高的消息传递上。
- RocketMQ:采用Java语言开发,由阿里巴巴开源,是阿里巴巴分布式消息中间件的一个核心组件。RocketMQ具有较高的吞吐量和稳定性,适用于大规模数据处理和高吞吐量的场景。
3.2 吞吐量与性能
- Kafka:具有极高的吞吐量和低延迟,单机可支持数百万级别消息/秒的处理能力。这得益于其Zero Copy机制、磁盘顺序读写、批量处理机制、分区机制等优化措施。
- RabbitMQ:与Kafka和RocketMQ相比,RabbitMQ的吞吐量相对较低。它更适用于处理不是那么紧急或者不那么高速的消息。
- RocketMQ:虽然RocketMQ的吞吐量也非常高,但与Kafka相比仍稍逊一筹。RocketMQ支持简单的水平扩展,可以通过添加新的broker节点来提高容量和可用性。
3.3 可靠性与容错性
- Kafka:采用分布式架构,支持副本机制,可以确保消息在发送时不会丢失,并且可以通过多个副本来保证消息的可靠性。Kafka支持同步和异步两种消息复制方式,但异步复制可能导致数据丢失。
- RabbitMQ:具有非常高的可靠性,支持多种消息确认机制,如生产者确认、消费者确认等,可以确保消息不会丢失。RabbitMQ还支持事务,但事务的使用可能会形成阻塞。
- RocketMQ:同样采用分布式架构,支持同步刷盘和异步刷盘,以及同步Replication和异步Replication。RocketMQ的同步刷盘在单机可靠性上比Kafka更高,不会因为操作系统Crash导致数据丢失。
3.4 使用场景
- Kafka:广泛应用于日志收集、实时数据处理、消息系统以及流处理等场景。Kafka的高吞吐量和低延迟特性使其成为处理大规模数据流的理想选择。
- RabbitMQ:适用于各种异步任务队列,如邮件发送、短信发送、图片和视频转码等。RabbitMQ还支持高级的消息模型,如RPC、请求-响应和消费者确认等,适用于企业级应用。
- RocketMQ:适用于大规模消息传输和处理场景,如电商平台订单、库存消息等。RocketMQ还支持分布式事务消息和顺序消息等高级功能,适用于对消息顺序和事务性有较高要求的场景。
3.5 其他特性
- Kafka:支持多分区、多生产者、多消费者,基于订阅模式,支持发布-订阅和点对点通信。Kafka还支持消息持久化,可支持数天甚至数月的数据存储。
- RabbitMQ:支持多种消息协议,包括AMQP、STOMP、MQTT等,可以满足不同的应用需求。RabbitMQ的配置和管理相对简单,易于上手。
- RocketMQ:提供了易于使用的API,支持多种编程语言。RocketMQ还支持消息查询和回溯功能,有助于定位消息丢失问题和重新消费历史消息。
综上所述,Kafka、RabbitMQ和RocketMQ在语言、吞吐量、可靠性、使用场景等方面各有千秋。选择哪个消息队列系统取决于具体的应用场景和需求。
参考 kafka和rabbitmq对比(超详细,从实战维度比较)、RabbitMQ和kafka的区别(详细版)、何时使用Kafka而不是RabbitMQ
相关文章:

RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别
文章目录 一、kafka和rabbitmq全面对比分析1.1 简介1.2 kafka和rabbitmq全面对比分析1.3 影响因素 二、RabbitMQ、Kafka主要区别2.1 详解/主要区别2.1.1 设计目标和适用场景2.1.2 架构模型方面2.1.3 吞吐量和性能2.1.4 消息存储和持久化2.1.5 消息传递保证2.1.6 集群负载均衡方…...

【案例35】销售订单公式问题导致系统宕机
问题现象 经过顾问反馈,发现系统现在出现卡顿,NCC一直在转圈。 问题分析 远程排查,发现在服务器从机上defalut-7发生了内存溢出,宕机。 生成了宕机日志。分析结果如下: 销售订单相关操作,vo太多了导致…...

编程-设计模式 4:建造者模式
设计模式 4:建造者模式 定义与目的 定义:建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。目的:该模式主要用于创建复杂对象时,这些对象的创建过程可能涉及多个步骤,…...

百度文心一言API调用,千帆大模型获取API Key和API Secret图解
百度文心一言大模型调用教程,获取文心一言API Key和API Secret的方法,码笔记mabiji.com告诉大家在百度智能云的千帆大模型平台创建应用,即可获取文心一言的API Key和API Secret,详细流程如下: 1、在百度智能云的千帆大…...

kafka下载|安装
1、下载kafka https://kafka.apache.org/downloads 2、安装kafka 解压下载的kafka安装包即可 tar -xvf kafka_2.13-3.7.0.tgz -C /usr/local/3、查看kafka目录 bin目录:存放了脚本 config目录:主要存放了配置文件...

贪心算法part03
134 加油站 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行…...

以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展
在科技日新月异的今天,AI技术如同一股不可阻挡的潮流,正深刻改变着我们的世界,尤其是数字媒体产业发展。作为数字产业生态链的杰出建设者,树莓集团始终站在时代前沿,积极探索AI技术如何为数字媒体产业注入新活力。 在树…...

package.json的 和 的区别,以及|| 和 | 的区别
在 package.json 文件中的 scripts 字段里,&& 和 & 用于连接不同的命令,它们的区别在于命令执行的方式和效果: &&: 用于串联两个命令,第一个命令成功(退出码为 0)后&#x…...

Wireshark_DNS_v7.0
Wireshark_DNS_v7.0 一、 nslookup 前置 nslookup 是一个网络命令行工具,用于查询域名系统(DNS)中的域名解析记录。通过使用 nslookup,你可以获取某个域名的IP地址,或者获取与某个IP地址关联的域名信息。 查看域名…...

阿里云的CentOS系统上安装Docker
在阿里云的CentOS系统上安装Docker的详细步骤如下: 一、前置条件 确保系统内核版本:Docker要求CentOS系统的内核版本高于3.10。你可以通过执行uname -r命令来查看当前系统的内核版本。卸载旧版本的Docker(如果已安装)࿱…...

力扣面试经典100题
进阶,其他解法 数组 88. 合并两个有序数组 - 力扣(LeetCode) 1、按非递减顺序合并两个数组 从末尾开始,用while分没到两个数组头,到第一个数组头,到第二个数组头三种情况 class Solution { public:voi…...

python打怪练习
1. 求一个数的幂值 def mi(a, b):c afor i in range(b-1):a a * creturn aprint(mi(2, 4))2. 输出斐波那契数列 def feibonaqi(n):l []a 1b 1for i in range(n):l.append(a)l.append(b)a b ab a bprint(l)feibonaqi(5)3. 输出特定字典数据 keys [name, old, score…...

excel下载模板,0KB或者乱码问题
Sptingboot项目 — maven打包,云效,docker,k8s 场景 — 导出excel模板 问题 1.乱码 2.下载为0KB,打开没有数据 模板内容 测试代码 测试方法 方法过程结果问题原因将文件直接放到服务器使用接口下载数据正常,排除文件问题排…...

JDBC连接Mysql数据库超详细讲解
JDBC连接Mysql数据库 如何导入驱动jar包 进入mysql官网 – https://www.mysql.com/ 点击下载找到方框内选项 点击 在项目文件夹创建lib文件 , 将下载好的驱动器导入 , 再添加到项目即可 步骤一:注册JDBC驱动 在Java中,要与数据库进行交互&…...

ArcGIS基础:自定义创建点线面等样式符号以方便使用
有时,使用ArcGIS自带的符号样式库无法满足我们使用要求,还需要进行调整,可能会浪费一些时间,那么自己新建一些样式符号备用, 需要的时候直接使用,会节省很多时间,大家学会之后,对学…...

蔚来2025届全球校招笔试/测评通关攻略北森测评题库更新了!
蔚来2025届全球校园招聘笔试/测评攻略 尊敬的各位考生,蔚来汽车2025届全球校园招聘笔试/测评环节即将开启。为了帮助您更好地准备并顺利通过这一环节,我们特此提供以下详细攻略。 一、考前准备 确认考试时间:请务必在截止日期前完成考试&am…...

如何在linux系统上部署Redis
<1>简介 Redis 全称 Remote Dictionary Server(远程字典服务器),是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务…...

操作系统开发行业的市场需求分析
操作系统作为计算机软件生态的核心,其开发不仅关乎技术的深度与广度,更与市场需求紧密相连。随着技术的不断进步和各行各业对数字化转型的迫切需求,操作系统开发行业面临着日益复杂且多样化的市场需求。以下从基础功能需求、技术创新需求、行…...

SpringMVC 的 拦截器
Spring MVC 提供了一套拦截器(Interceptor)机制,主要用于处理 Web 请求到达控制器之前或响应离开控制器之后执行一些操作。拦截器可以用于执行预处理(如验证用户身份)和后处理(如清理资源或修改响应&#x…...

Redisson可重入锁原理(基于黑马视频总结,保姆级)
上一篇文章我们基于redis的set nx ex 命令以及Lua脚本实现了基本的分布式锁,但是还存在一下几点问题。于是又引出了redisson。 为什么基于SETNX的分布式锁无法实现可重入 先在method1中获取锁,获取成功后又调用method2,而method2内部也会获取…...

Ubuntu 安装 Watt-Toolkit
一、下载 Watt-Toolkit 下载Watt-Toolkithttps://steampp.net/download 二、设置 Watt-Toolkit 打开 Watt-Toolkit,点击 “网络加速→加速设置,打开证书文件夹” ,当前证书路径为:/home/yammie/.local/share/Steam/Plugins/Acc…...

python中的省略号(...)
下面对python学习中遇到的省略号做个总结 # 1. 前言 在Python中,一切皆对象,...也是对象,它和对象Ellipsis是等价的。对象...和Ellipsis的类型都是ellipsis,代码示例如下。 print(Ellipsis) # 输出:Ellipsis print(…...

第129天:内网安全-横向移动WmiSmbCrackMapExecProxyChainsImpacket
这里这个环境继续上一篇文章搭建的环境 案例一: 域横向移动-WMI-自带&命令&套件&插件 首先上线win2008 首先提权到system权限 wmic是windows自带的命令,可以通过135端口进行连接利用,只支持明文方式,优点是不用上传别…...

ChatGPT教我将MySQL中where find_in_set改成PostgreSQL支持的写法
问题 之前使用Mybatis,在MySQL中使用如下SQL语句没有问题: SELECT * FROM dept WHERE find_in_set(5,dept_parent);现在切换到PostgreSQL,发现find_in_set函数不能使用。 解决 SELECT * FROM dept WHERE 5 ANY(string_to_array(dept_parent, ,));总…...

Python命令模式:掌控你的代码指令
Python命令模式:掌控你的代码指令 在软件工程的浩瀚海洋中,命令模式(Command Pattern)是一盏指引航向的明灯,它将请求或操作封装成对象,从而让代码更加灵活、可扩展。本文将深入探讨Python中的命令模式&am…...

【物联网】(防水篇)电子产品 IPX7 防水级别测试的具体流程
电子产品 IPX7 防水级别测试的具体流程 1. 准备工作: - 准备一个足够大的浸水箱,确保水深至少为 1 米,以满足 IPX7 测试的标准要求。 - 将水温控制在标准温度范围内,通常在 15-35 摄氏度之间,以模拟正常使用环境。 2…...

Redis 实现消息队列
Redis 实现消息队列 文章目录 Redis 实现消息队列导引1. 基于List结构的消息队列2. 基于PubSub的消息队列3. 基于Stream的消息队列(推荐)3.1 XADD3.2 XREAD3.3 XGROUP 导引 消息队列(Message Queue),从概念上来理解就是用来存放消息的队列,最简单的消息…...

模板初阶(详解)
一、泛型编程 为了引出模板,我们来看下面代码,比如要实现不同类型的交换函数,如下: void Swap(int& a, int& b) {int c a;a b;b c; } void Swap(char& a, char& b) {char c a;a b;b c; } void Swap(doubl…...

对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
📚 对称加密算法解析:DES、AES及其在pycryptodome 和 crypto-js 模块中的应用 🗝️ DES 算法 算法原理 数据加密标准(DES)是一种对称密钥加密算法,用于保护数据的安全。DES 使用一个 56 位的密钥进行加密…...

C++设计模式(代理模式)
1. 电话虫 在海贼中,有一种神奇的通信工具叫做电话虫(Den Den Mushi),外形如蜗牛,身上带有斑点或条纹或通体纯色,壳顶上有对讲机或按键,不接通时会睡觉,接通时会惊醒,并发…...