探索 RocketMQ:企业级消息中间件的选择与应用

一、关于RocketMQ

RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统,广泛应用于金融、电商、日志系统、数据分析等领域。

c41a6a12-fb7d-47b5-b0a0-a6e1a437a07d

RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等,总之就是葛大爷的一句话。

8d2af478-f112-4738-9d28-6a20ed02c5fa

二、发展

消息队列属于最经典的中间件之一,已经有 30 多年的历史,其发展历程可以总结为几个阶段:

  • 第一阶段,2000 年之前。这个阶段的消息队列供应商是几家商业软件巨头,比如 IBM、Oracle、Microsoft 都有自己的商业化 MQ,其中最具代表性的是 IBM MQ,价格昂贵,面向高端企业,主要是大型金融、电信等企业;这类商业 MQ 一般采用高端硬件,软硬件一体机交付,MQ 本身的软件架构是单机架构。
  • 第二阶段,2000~2007 年。进入 00 年代后,初代开源消息队列崛起,诞生了 JMS、AMQP 两大标准,与之对应的两个实现分别为 ActiveMQ、RabbitMQ,他们引领了初期的开源消息队列技术。开源极大的促进了消息队列的流行、降低了使用门槛,技术普惠化,逐渐成为了企业级架构的标配。
  • 第三阶段,2007~2017 年。PC 互联网、移动互联网爆发式发展。由于传统的消息队列无法承受亿级用户的访问流量和海量数据传输,诞生了互联网消息中间件,核心能力是全面采用分布式架构、具备很强的横向扩展能力,开源典型代表有 Kafka、RocketMQ,闭源的还有淘宝 Notify。

RocketMQ 发展的主要历程:

2007年:淘宝实施了“五彩石”项目,“五彩石”用于将交易系统从单机变成分布式,也是在这个过程中产生了阿里巴巴第一代消息引擎——Notify。

2010年:阿里巴巴B2B部门基于ActiveMQ的5.1版本也开发了自己的一款消息引擎,称为Napoli,这款消息引擎在B2B里面广泛地被使用,不仅仅是在交易领域,在很多的后台异步解耦等方面也得到了广泛的应用。

2011年:业界出现了现在被很多大数据领域所推崇的Kafka消息引擎,阿里巴巴在研究了Kafka的整体机制和架构设计之后,基于Kafka的设计使用Java进行了完全重写并推出了MetaQ 1.0版本,主要是用于解决顺序消息和海量堆积的问题。

2012年:阿里巴巴开源其自研的第三代分布式消息中间件——RocketMQ

经过几年的技术打磨,阿里称基于RocketMQ技术,目前双十一当天消息容量可达到万亿级。

2016年11月:阿里将RocketMQ捐献给Apache软件基金会,正式成为孵化项目。

阿里称会将其打造成顶级项目。这是阿里迈出的一大步,因为加入到开源软件基金会需要经过评审方的考核与观察。

坦率而言,业界还对国人的代码开源参与度仍保持着刻板印象;而Apache基金会中的342个项目中,暂时还只有Kylin、CarbonData、Eagle 、Dubbo和 RocketMQ 共计五个中国技术人主导的项目。

2017 年,RocketMQ 成功通过了 Apache Incubator 的评审,正式成为 Apache 顶级项目(Top-Level Project, TLP) 。这个标志性事件不仅提升了 RocketMQ 在全球开源社区的影响力,也使其获得了更多来自外部社区的支持和贡献。

2017年2月20日:RocketMQ正式发布4.0版本,专家称新版本适用于电商领域,金融领域,大数据领域,兼有物联网领域的编程模型。

2023 年,RocketMQ 发布了 5.x 版本,继续强化其在云原生、容器化环境中的应用,并且在微服务架构中发挥了重要作用。此版本在性能、可扩展性和稳定性方面进行了进一步优化,增强了在异构环境下的跨平台兼容性,并扩展了更多高级特性,如 精准消息投递更加细粒度的消息过滤 等。

以上就是RocketMQ的整体发展历史,其实在阿里巴巴内部围绕着RocketMQ内核打造了三款产品,分别是MetaQNotifyAliware MQ

这三者分别采用了不同的模型,MetaQ主要使用了拉模型,解决了顺序消息和海量堆积问题;Notify主要使用了推模型,解决了事务消息;而云产品Aliware MQ则是提供了商业化的版本。

三、功能特点

  1. 高可靠性: RocketMQ 提供了强大的消息可靠性保证机制。它支持 消息持久化,即使在系统崩溃后,消息仍然可以恢复。此外,RocketMQ 提供了消息重试机制,确保消息不会丢失。

  2. 高吞吐量: RocketMQ 的设计目标之一就是高吞吐量。它通过高效的网络通信和存储方式,能够处理大量的并发请求,适用于大规模分布式场景。

  3. 分布式架构: RocketMQ 使用 分布式架构,其主要组件包括 NameServer(负责服务发现),Broker(消息存储与转发),Producer(消息生产者),Consumer(消息消费者)。RocketMQ 具有水平扩展性,能够支持多台机器集群化部署,保证了系统的高可用性和弹性扩展。

  4. 顺序消息支持: RocketMQ 提供了强大的 顺序消息支持。对于需要保证消息顺序的应用,RocketMQ 可以通过同一队列中存储顺序消息,确保消费顺序的一致性。

  5. 多种消息模型: RocketMQ 支持多种消息模型,如:

    • 点对点模式(P2P) :消费者独占某个队列的消息,保证一个消息只被一个消费者消费。
    • 发布/订阅模式(Pub/Sub) :多个消费者可以订阅同一个主题(Topic),消息广播到所有消费者。
  6. 高可扩展性: RocketMQ 通过分区(Topic 分区)和分布式的消息存储,可以横向扩展,支持大规模消息的存储和处理。可以灵活地根据业务需求进行扩展。

  7. 多语言客户端支持: RocketMQ 提供了多种客户端 SDK,支持 Java、C++、Python、Go 等多种语言,方便开发者进行跨语言集成。

  8. 事务消息: RocketMQ 提供了 事务消息功能,可以支持分布式事务场景中的消息可靠性保证。通过事务消息,开发者可以保证消息与本地事务的一致性。

  9. 消息回溯与重试机制: 支持消息的 回溯功能,允许消费者查看过去的消息,还支持消息的 重试机制,确保消息处理失败时不会丢失。

  10. 灵活的消息过滤: RocketMQ 支持消息的 标签过滤(Tag-based filtering),允许消费者根据消息的标签过滤需要的消息。

四、对比其它中间件

特性RocketMQKafkaRabbitMQActiveMQNATS
开发背景阿里巴巴开发,2010 年开源,现为 Apache 顶级项目LinkedIn 开发,2011 年开源,现为 Apache 顶级项目Pivotal(现 VMware)开发,开源项目Apache 软件基金会开发,支持多协议的消息队列开源项目,初衷为轻量级实时消息传递
消息协议自定义协议,兼容 MQTT、OpenMessaging 等自定义协议(Kafka 协议)支持 AMQP、STOMP、MQTT 等多种协议支持 AMQP、OpenWire、MQTT 等多种协议NATS 协议,专注于简单的 Pub/Sub 模型
性能与吞吐量高吞吐量,低延迟,适用于高并发场景主要侧重吞吐量,适用于大数据流处理吞吐量较低,适用于中小型企业吞吐量较低,适合中小型企业应用极低的延迟和极高的吞吐量,专注于实时性
消息模型支持点对点(P2P)和发布/订阅(Pub/Sub)模式主要是发布/订阅(Pub/Sub)模型支持点对点(P2P)和发布/订阅(Pub/Sub)模型支持点对点(P2P)和发布/订阅(Pub/Sub)模型支持 Pub/Sub 模型
消息存储顺序写入,支持高效的消息持久化顺序写入,按日志存储,支持高效的消息持久化使用内存/磁盘存储,支持消息持久化使用内存/磁盘存储,支持消息持久化存储较为简单,不强调持久化
扩展性支持分布式部署,高可用,支持水平扩展高扩展性,支持分布式部署和多副本机制集群模式,但扩展性不如 RocketMQ 和 Kafka支持集群模式,扩展性相对较差高扩展性,适用于大规模水平扩展
高可用性支持主从复制,集群模式,容错性高多副本机制,较强的容错性支持镜像队列和集群模式,容错性较好支持主从复制和集群模式,容错性一般支持集群模式和多节点部署,容错性较好
事务消息原生支持事务消息和分布式事务不支持原生事务消息,需自行实现支持事务消息,但性能不如 RocketMQ支持事务消息,但一致性和性能较差不支持事务消息
顺序消息支持严格顺序消费,适合高并发场景支持分区内的顺序消费,但需要手动控制分区的数量和分布支持顺序消费,但通常不如 RocketMQ 强大支持顺序消费,但不如 RocketMQ 强大不强调顺序消息处理
延迟在高并发场景下延迟较低,适用于实时消息传递吞吐量优先,延迟相对较高在高负载时延迟较高延迟较高,尤其在负载较重时延迟极低,适用于实时性要求较高的场景
适用场景高吞吐量、大规模分布式系统、事务消息、顺序消息等场景日志聚合、流数据处理、大数据平台企业消息传递、支持 AMQP 协议的系统中小规模企业消息传递、企业级应用实时数据流、IoT、微服务架构等高性能、低延迟场景
社区与生态Apache 社区支持,活跃且发展迅速Apache 社区支持,社区活跃社区活跃,广泛应用于企业级应用Apache 社区支持,但活跃度和扩展性相对较弱开源社区活跃,适用于微服务和高并发场景

总结

  • RocketMQ 在高吞吐量、低延迟和事务消息支持方面表现出色,适用于金融、电商等高并发、高可靠的场景。
  • Kafka 强调吞吐量,适用于大数据流处理、日志聚合等大规模数据平台,且具有较好的扩展性。
  • RabbitMQ 适用于中小规模企业,特别是需要支持多协议(如 AMQP)的消息传递应用。
  • ActiveMQ 相对较为传统,适合于小到中规模的企业应用,支持多协议但性能和扩展性较差。
  • NATS 轻量级、高性能,适用于实时性要求较高的场景,如物联网、微服务架构等。

五、应用场景

以下是一些典型的 RocketMQ 应用场景

  1. 金融行业
  • 交易消息系统:金融交易系统对消息的可靠性、事务性和高吞吐量有严格要求。RocketMQ 支持事务消息(Transaction Message),能够确保分布式事务的准确性,适合在银行、电商金融、支付系统中进行实时交易消息处理。
  • 风控系统:在金融风控系统中,常常需要高并发、高吞吐量的消息系统来处理海量数据。RocketMQ 的高吞吐量和低延迟特性使其适用于此类实时风控决策系统。
  • 资金调度:资金调度的核心需求是可靠性与高吞吐量,RocketMQ 能够在大规模并发请求下保证数据一致性,适合资金结算、账户调度等高并发场景。
  1. 电商平台
  • 订单处理系统:电商平台中的订单生成、支付、库存管理、物流等环节常常需要保证高并发、高吞吐量的消息传递。RocketMQ 能够保证系统的高效性,特别是在“双十一”等促销活动期间,能够平稳处理海量订单消息。
  • 异步消息处理:电商系统中,很多操作是异步的,例如支付回调、库存扣减、物流派送等。使用 RocketMQ 可以通过消息队列解耦这些操作,提高系统响应速度。
  • 促销活动推送:对于电商平台的秒杀、优惠券发放等高频业务,RocketMQ 能够提供高并发支持,保证消息的顺序和稳定性。
  1. 大数据与流处理
  • 日志收集与分析:RocketMQ 可以高效地处理海量的日志数据,支持从各类应用程序、服务器、设备等收集日志并进行实时处理。与 FlumeLogstash 等流式处理框架配合使用,能够快速地收集、传输和分析日志数据。
  • 数据流处理:在实时数据流的场景中,如实时大数据处理、数据分析、机器学习等,RocketMQ 能够以极低的延迟和高吞吐量确保数据的稳定传输,适用于大数据平台和流计算架构。
  1. 微服务架构
  • 微服务通信:在微服务架构中,服务之间通常通过异步消息传递进行解耦。RocketMQ 提供可靠的消息投递机制,可以保证服务间的数据一致性,避免系统耦合过紧。通过 RocketMQ,服务间的通信能够更加灵活、可靠。
  • 异步处理与事件驱动:RocketMQ 作为事件驱动架构(EDA)中的核心组件,能够很好地支持微服务中的异步处理和事件发布与订阅模式。事件驱动模型适用于需要处理高并发、低延迟业务的微服务系统。
  1. 物联网(IoT)
  • 设备数据收集与处理:在物联网应用中,设备的数量庞大,产生的数据量巨大,且对实时性要求较高。RocketMQ 的高吞吐量、低延迟和高可靠性非常适合用于 IoT 系统中,能够实时收集来自各类设备的数据并进行分发处理。
  • 状态监控和告警系统:RocketMQ 能够支持设备的状态数据流转,以及实时告警通知。通过将设备数据发送到消息队列中,再进行实时分析和处理,能够在出现异常时及时触发告警。
  1. 实时消息推送
  • 社交平台消息推送:在社交平台中,实时消息推送是一项核心功能,如聊天消息、通知、点赞、评论等,RocketMQ 具备高吞吐量和低延迟的特点,能够保证大规模用户的实时消息推送。
  • 内容分发网络(CDN) :RocketMQ 可以帮助构建高效的内容分发和通知系统,推送实时更新、推荐内容等,确保数据在多个节点之间快速传递,特别适用于需要快速内容更新的场景。
  1. 日志与事件追踪
  • 异步日志记录:许多应用系统会在后台记录用户操作、系统运行状态等信息。RocketMQ 可以异步记录日志,避免同步阻塞,同时保证高效的日志传输和存储,尤其适合大规模分布式系统的日志收集。
  • 事件追踪与分析:在微服务架构中,事件追踪(如调用链追踪)对于监控和故障排查至关重要。RocketMQ 可以确保事件流的高效传递和顺序处理,帮助构建全面的事件追踪系统。
  1. 消息驱动的异步任务
  • 后台任务处理:很多系统的任务是异步的,如生成报表、邮件发送、数据处理等。使用 RocketMQ 进行任务调度和消息驱动处理,可以有效解耦主业务流程和耗时的任务处理,提高系统的响应能力。
  • 定时任务与延时消息:RocketMQ 支持延时消息功能,可以用来处理定时任务、超时重试等操作。比如在电商场景中,发货时间的计算、延时支付的重试等都可以通过 RocketMQ 延时消息机制来实现。
  1. 日志与审计系统
  • 审计日志收集:在许多业务中,审计日志的收集与处理具有重要意义,特别是在合规性要求较高的行业(如金融、医疗等)。RocketMQ 可以作为日志收集的中间件,确保日志的可靠传输与持久化。
  1. 分布式系统与高可用架构
  • 系统解耦与弹性扩展:在复杂的分布式系统中,RocketMQ 可以通过消息队列解耦各个服务模块,保证系统的可靠性和高可用性。尤其是在微服务架构中,消息中间件可以减少服务间的直接依赖,提高系统的扩展性和容错能力。

场景示例1—异步解耦

随着微服务架构的流行,服务之间的关系梳理非常重要。异步解耦可以降低服务之间的耦合程度,同时也能提高服务的吞吐量。

使用异步解耦的业务场景非常多,因为每个行业的业务都会不太一样,以一些比较通用的业务来说明相信大家都能理解。

比如电商行业的下单业务场景,以最简单的下单流程来说,下单流程如下:

  1. 锁库存
  2. 创建订单
  3. 用户支付
  4. 扣减库存
  5. 给用户发送购买短信通知
  6. 给用户增加积分
  7. 通知商家发货

我们以下单成功后,用户进行支付,支付完成会有个逻辑叫支付回调,在回调里面需要去做一些业务逻辑。首先来看下同步处理需要花费的时间,如下图:

膜拜!看完这篇你还不懂RocketMQ算我输

同步流程

上面的下单流程从 3 到 5 都是可以采用异步流程进行处理,对于用户来说,支付完成后他就不需要关注后面的流程了。后台慢慢处理就行了,这样就能简化三个步骤,提高回调的处理时间。

膜拜!看完这篇你还不懂RocketMQ算我输

异步流程

场景示例2—削峰填谷

削峰填谷指的是在大流量的冲击下,利用 RocketMQ 可以抗住瞬时的大流量,保护系统的稳定性,提升用户体验。

在电商行业,最常见的流量冲击就是秒杀活动了,利用 RocketMQ 来实现一个完整的秒杀业务还是与很多需要做的工作,不在本文的范围内,后面有机会可以单独跟大家聊聊。想告诉大家的是像诸如此类的场景可以利用 RocketMQ 来扛住高并发,前提是业务场景支持异步处理

膜拜!看完这篇你还不懂RocketMQ算我输

削峰填谷

场景示例3—分布式事务最终一致性

众所周知,分布式事务有 2PC,TCC,最终一致性等方案。其中使用消息队列来做最终一致性方案是比较常用的。

在电商的业务场景中,交易相关的核心业务一定要确保数据的一致性。通过引入消息队列 RocketMQ 版的分布式事务,既可以实现系统之间的解耦,又可以保证最终的数据一致性。

场景示例4—数据分发

数据分发指的是可以将原始数据分发到多个需要使用这份数据的系统中,实现数据异构的需求。最常见的有将数据分发到 ES, Redis 中为业务提供搜索,缓存等服务。

除了手动通过消息机制进行数据分发,还可以订阅 Mysql 的 binlog 来分发,在分发这个场景,需要使用 RocketMQ 的顺序消息来保证数据的一致性。

膜拜!看完这篇你还不懂RocketMQ算我输

数据分发

六、RocketMQ 组件

RocketMQ 的架构主要包括以下几个核心组件:

  1. NameServer
    NameServer 是一个轻量级的服务发现模块,负责管理 Broker 节点的元数据,帮助 Producer 和 Consumer 查找 Broker,类似于一个服务注册与发现中心。
  2. Broker
    Broker 是消息的存储和转发节点,消息生产者将消息发送到 Broker,消费者从 Broker 中拉取消息。Broker 负责消息的持久化存储、顺序消费和消息的投递。
  3. Producer
    Producer 是消息生产者,负责将消息发送到指定的 Topic。每个 Producer 可以连接多个 Broker,发送消息到不同的队列。
  4. Consumer
    Consumer 是消息消费者,负责从 Broker 拉取消息进行消费。Consumer 可以是 推模式(Push)或 拉模式(Pull),支持异步或同步消费。
  5. Admin Console
    RocketMQ 提供了管理控制台,用于监控和管理集群的状态、Topic、Consumer 以及消息的流量等信息。

七、消息传递流程

  1. Producer 发送消息
    Producer 将消息发送到 RocketMQ 的 Broker,并通过 NameServer 找到目标 Broker。消息被分配到一个队列(Queue),可以是顺序队列或并发队列。
  2. 消息存储
    Broker 接收到消息后会将其持久化到磁盘中,并且根据需要将消息复制到其他副本节点,保证高可用性。
  3. Consumer 拉取消息
    消费者(Consumer)从 Broker 拉取消息进行消费。RocketMQ 支持按 消息队列(Queue)消息主题(Topic) 进行消费,可以配置多种消费策略和消费并发度。
  4. 消息确认和重试
    消费者确认消息消费成功后,RocketMQ 会将消息从队列中删除;如果消费失败,消息会进入重试队列,按配置重试消费。

ba37ca06-a3f1-4b7f-a03f-d240a586502e

通过本文的介绍,我们可以看到 RocketMQ 作为一款高效的分布式消息中间件,无论你是正在考虑在项目中引入 RocketMQ,还是已经在使用它的开发者,掌握 RocketMQ 的核心特性和最佳实践对于提升系统的可靠性和性能至关重要。后续将分享RocketMQ的部署,及开发使用流程。

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

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

相关文章

设计模式之 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将多个处理对象通过链式结构连接起来,形成一条处理请求的链条。每个处理对象都有机会处理请求,或者将请求传递给链中的下一个对象。这样&#x…

Flink-Source的使用

Data Sources 是什么呢?就字面意思其实就可以知道:数据来源。 Flink 做为一款流式计算框架,它可用来做批处理,也可以用来做流处理,这个 Data Sources 就是数据的来源地。 flink在批/流处理中常见的source主要有两大类…

python开发之Linux

文章目录 1. 基础2. 进阶链接压缩/解压缩 文件权限用户远程操作编辑文件软件安装 1. 基础 # 查看当前目录下文件 ls# 查看当前目录 pwd# 清除界面内容 clear# 切换目录 cd# 创建目录 mkdir# 创建文件 touch 文件 vi 文件# 强制删除 rm -rf # 复制文件 cp 复制文件 复制文件路径…

【数据结构】七种常用排序总结

一、七种排序及其讲解 以下为七种排序的讲解: 【数据结构】插入排序——直接插入排序 和 希尔排序 【数据结构】选择排序——选择排序 和 堆排序 【数据结构】交换排序——冒泡排序 和 快速排序 【数据结构】归并排序 —— 递归及非递归解决归并排序 二、排序的…

计算机网络(14)ip地址超详解

先看图: 注意看第三列蓝色标注的点不会改变,A类地址第一个比特只会是0,B类是10,C类是110,D类是1110,E类是1111. IPv4地址根据其用途和网络规模的不同,分为五个主要类别(A、B、C、D、…

HashMap底层原理

jdk1.8之后hashmap底层结构 jdk1.8之后,是哈希表数据结构,也可以说是数组链表或红黑树,下图是没有添加数据的一个hashmap。 现在开始添加数据,看下面具体步骤 put操作 如下,我们来简单看看hashmap的put源码&#xff…

【GD32】(三) ISP基本使用

0 前言 有一块GD32的板子不知道为啥用着用着就下载不了程序了,没办法,只能另寻他法。作为STM32的平替,GD32的功能和STM32基本是一致的,所以也可以使用ISP来下载程序。于是就开始复活这块板子。 1 BOOT模式 对于熟悉STM32开发的人…

摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现

随着科技的不断进步,摄像机视频分析软件的发展已经为我们的生活带来了许多便捷。其中,LiteAIServer视频智能分析平台的玩手机打电话检测算法技术尤为突出,它利用先进的图像处理和人工智能技术,能够自动识别并监控视频中的玩手机或…

推荐几个 VSCode 流程图工具

Visual Studio Code(简称VSCode)是一个由微软开发的免费、开源的代码编辑器。 VSCode 发布于 2015 年,而且很快就成为开发者社区中广受欢迎的开发工具。 VSCode 可用于 Windows、macOS 和 Linux 等操作系统。 VSCode 拥有一个庞大的扩展市…

学习Prompt Turning

传统的微调因为代价很高,而且一旦权重很大,这种fine 微微的意思是调不动模型的,所以需要这种提示词调 mindnlp直接有 peft config peft_config PromptTuningConfig(task_type“SEQ_CLS”, num_virtual_tokens10) 方便我们进行prompt tunin…

2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略(详细解题思路)

在当下, 日益发展的时代,宠物的数量应该均为稳步上升,在美国出现了下降的趋势, 中国 2019-2020 年也下降,这部分变化可能与疫情相关。需要对该部分进行必要的解释说明。 问题 1: 基于附件 1 中的数据及您的团队收集的额…

若依-一个请求中返回多个表的信息

背景 主表是点位表关联子表 需要知道对应 合作商的信息关联子表 需要直到对应 区域的信息关联子表 需要直到对应 设备数量 实现的方案 关联实体相关的标签

AWTK-WEB 快速入门(1) - C 语言应用程序

先安装 AWTK Designer 用 AWTK Designer 新建一个应用程序 2.1. 新建应用程序 这里假设应用程序的名称为 AwtkApplicationC,后面会用到,如果使用其它名称,后面要做相应修改。 在窗口上放置一个按钮将按钮的名称改为 “close”将按钮的文本改…

客户流失分析综述

引言 客户流失这个术语通常用来描述在特定时间或合同期内停止与公司进行业务往来的客户倾向性[1]。传统上,关于客户流失的研究始于客户关系管理(CRM)[2]。在运营服务时,防止客户流失至关重要。过去,客户获取相对于流失…

PDF内容提取,MinerU使用

准备环境 # python 3.10 python3 -m pip install huggingface_hub python3 -m pip install modelscope python3 -m pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com下载需要的模型 import json import osimport requests from huggingface_hub…

Kafka 分区分配及再平衡策略深度解析与消费者事务和数据积压的简单介绍

Kafka:分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

【2024APMCM亚太赛A题】完整参考论文与代码分享

A题 一、问题重述二、问题分析问题一:水下图像分类问题二:退化原因建模问题三:针对单一退化的图像增强方法问题四:复杂场景的综合增强模型问题五:针对性增强与综合增强的比较 三、问题假设退化特征独立性假设物理模型普…

数据结构(初阶6)---二叉树(遍历——递归的艺术)(详解)

二叉树的遍历与练习 一.二叉树的基本遍历形式1.前序遍历(深度优先遍历)2.中序遍历(深度优先遍历)3.后序遍历(深度优先遍历)4.层序遍历!!(广度优先遍历) 二.二叉树的leetcode小练习1.判断平衡二叉树1)正常解法2)优化解法 2.对称二叉…

ChatGPT 与其他 AI 技术在短视频营销中的技术应用与协同策略

摘要: 本文深入探讨了 ChatGPT 及其他 AI 技术在短视频营销中的应用。从技术层面剖析了这些技术如何助力短视频内容创作、个性化推荐、用户互动以及营销效果评估等多方面,通过具体方法分析、数据引用与大模型工具介绍,旨在为短视频营销领域提…

先安装Ubuntu20.04,再安装win10实现双系统

准备 一个刻录好Ubuntu20.04系统u盘一个刻录了Ventory的U盘,其中有Windows10的iso系统文件。Ventory参考Gparted分区软件,用于腾出一块硬盘空间安装Win10 过程 给win10腾出一块硬盘空间,设置为NTFS格式 Ubuntu系统中其实已经有GParted软件…