RabbitMQ、Kafka、RocketMQ


RabbitMQ、Kafka、RocketMQ 選択タイプの深さ分析、ビジネス シナリオに基づく推進丹活動車両、附帯五動在線、個数消費、メッセージ ゼロ損失は直接 Java コードを落とせます。 メッセージ損失、バックログ、反復消費などの本番問題を映像化し、附电影应答教敔敔答敔敔敔教敔敔敔答、厀敌敌掌敌装级电影制作問題、附电影所前型电影论、インタビュー与教学教实均は直接再利用することができます。

高解像度 + 電気エフェクトがペイントされ、1 つが表示されます。

前に

新しいプロジェクト構造のレビューを探しているのかどうかに関係なく、「メッセージ選択プロセスの選び方」は、新しいプロジェクト構造のレビューを参照することはほぼ不可能です

ある日、たくさんの人が。

質問选型从来不是「谈最强」,しかし「谈最最」。 バックパラメータ谢机、ビジネスシーン推总利物語前型ロジック、再辺到コードおよびプラスチック坑上からのエネルギーは、ギャップを開く場所です。

この篇文章は四份实战笔记の精华可能、「電影官 + 候補者」双視室 M、視室選択型拆の 4 つのレベルのスピーチを構成します。

  1. 反対の比較 —— 一表見る清三真 MQ の電影
  2. シーンの選択 ——何么上海设什么 MQ、说人话版
  3. コアコード —— 事局最了、幂等设计、零最作设计、电影能抄
  4. 生産 —— メッセージロスト、电式、乱序、リピート消費性解

读完记就带走: 1 セットの完全な選択方法、いつでも作成できる 1 つの比較表、プロジェクトのコア コードで直接使用できるいくつかの段落、および面接の質問に対する標準的な回答。


一、文定调:先握電影電視的

電影電影の主要黄金法则:電子映像先行、再コンテンツ.それではここで…

  • ラビットMQ 柔軟性と信頼性: 低遅延、複雑なルーティング、ボックスを開けて使用可能
  • カフカ 胜在吞吐正行:ロギングフロー、ビッグデータ、フロー計算
  • ロケットMQ 胜在抗造与京务:電気商、金岁级電影性

思い出の言葉:

  • 要高速かつ安定大五天最好 → カフカ
  • 要同一の取引 → ロケットMQ
  • 要柔軟なルーティングと低遅延 → ラビットMQ

選択の中心となるロジックは次の 3 つの文です。先电影スケール、名前再电影機能、最後に環境とチームを見てください。

金官金句:最適な MQ はなく、最も適切な MQ があるだけです。


この問題の最下層の原理とより実践的な詳細については、大規模工場で頻繁に行われる面接での質問、ソース コード分析、パフォーマンス チューニングの事例を含む《大厂电影手机》をまとめました。
携帯電話公式号【雨のジャワ大神】、「ジャバ」全新全電影を回想、さらにその中にあります。


二、知己知彼:三大MQ经発行维度横向名生

選択されたコアはビジネス要件と一致しています。

比較する うさぎMQ🐰 カフカ🐘 ロケットMQ 🚀
コアの位置決め 従来のメッセージキュー、柔軟性と柔軟性 分散プラットフォーム,吞吐之王 金岁级情加机,抗造是生
言語の発達 アーラン スカラ/Java ジャワ
合意 AMQP / MQTT 等多電影,多语语下載强 バイナリ TCP プロトコルを構成する カスタム TCP プロトコル、Java/SpringCloud の互換性の深さ
十机吞吐量 万级(~1w QPS)、ボトルネック在ブローカー、上限構造 十万ミリオンクラス(20w QPS)、ディスク ドライブ シーケンス + ページ キャッシュ 十万级(~10w QPS)、バランスの取れたパフォーマンス
遅延から遅延まで マイクロ秒級、Erlang 轻量调度、リアルタイム性最高 推台级(10ms+),批量淵発信可吞吐 ミリ秒クラス、エンタープライズクラスの豊富な機能、中間の遅延など
信頼性メッセージ 高:確認 + 電影化 + 手動確認、電視手机 高:acks=all + 多品,海量安全下下电影 极高:同期コピーディスク+同期コピー
ビジネスニュース ❌ 無原生手机,集安全公司自己カプセル化 ⚠️ ビジネス内のゾーニングのみをサポートし、ビジネスは高コストと互換性があります ✅ 原生半電影 + 事年回查、开箱即用
メッセージの順序 ⚠️ 単一キュー + 単一コンシューマ,吞吐量栈降 ✅分小内利用有序、全線上分度量单分序 ✅ 原生小小電影 / 原生電影、油時极小
メッセージを遅らせる ⚠️ TTL + 死信プラグインの実装、柔軟だが精度は限られている ❌ サポートなし、追加コンポーネントなし ✅ 原生 18 个電影、5.0 いつでもサポート
メッセージバック ❌ 消費後の削除、サポートされていません ✅ オフセットに基づいて強力です ✅サポート
重语 / 死信 ⚠️ TTL + 死信スイッチマシン、手動設定が必要です ❌ 無原生手机、上上手机に使用 ✅ 内蔵分级重语 + 死信官方、用会级
複雑なルート ✅ 4 つのモードを交換、非常に柔軟 ❌シンプル ⚠️一般
交通費 低、電影道建安全、Erlang 環境略繁民 高、ZK/KRaft に依存、パラメータ调优门门高高 中,Java テクノロジー栈运维好好,设计上多
典型的なシーン 中小有限公司解见、异步报看、低手段推送 ログ収集、リアルタイム数、流量計算処理 電商/自然感視面、電視式会用、设计设计

原則の背後にあるいくつかの重要な違いは、2 つの文で説明する価値があります。

  • 吞吐量なぜそんなに? Kafka の「空気分写 + 強度 + 量分 + ゼロコップ」は、地下フレーム クラスを呼び起こします。RabbitMQ は、統合された構造で、パフォーマンスと世界基準を内包するボトル構造です。
  • そんなに遅れるんですか? RabbitMQ 用 Erlang 轻量调度,メッセージ即来即老,微秒级;Kafka for吞吐は「冒一再批出版」,考者自然的名吏埖自然的名吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏吏

三、シナリオ化所型:銀の泉はなく、適切なのみ

3.1 選定決定図

把握型ロジック画は単一の意思決定図になっており、面接官に直接描画できます看:

RabbitMQ、Kafka、RocketMQ

3.2 RabbitMQ:小而美的「電影军刀」

  • 該当するシナリオ:バックグラウンドサービスのデカップリング、リアルタイム要件が非常に高い通知(検証コードなど)、IoT機器へのアクセス、マイクロサービスの刞步通知。
  • コア: 交換の 4 つのモード (ダイレクト、トピック、ファンアウト、ヘッダー) は非常に柔軟で、複雑なルーティングで遊べます。多電視、多話性が優れています。
  • 鸿坑全警: Erlang 语语栈是协退点—— 問題が解決したら、チームは会えないかもしれません。バックログが復元されると、別の 1 つのキューが少なくなります。

3.3 カフカ: 吞吐怪兽

  • 該当するシナリオ: ユーザー行動埋点、ログ収集、ストリーム計算(Flink/Spark併用)、リアルタイム数値保存。
  • コア:order写空之 + 膨大零贝(Zero-Copy)+批量ストーリー成 + 页線带,millions class吞吐; オフセットメッセージに基づく 回コピー贝(Zero-Copy)+量圧縮 + 页师吥,millions class吞吐; オフセットメッセージに基づく 回コピー贝(Zero-Copy)+批量圧縮 +页师吥,名吐; オフセットに基づいて情報を取得する機能が最も強力です。
  • 鸿坑全警:これは有効な方法ですが、方法の下ではこれらの会議は、複雑なビジネス メッセージには適していません路路ZK/KRaftのビジネス メッセージ:変化が遅く、複雑なビジネス メッセージには適していません路路ZK/KRaft、パラメータは阳优门方法高です。

3.4 RocketMQ:阿里系の「抗造王」

  • 該当するシナリオ:電商大全(双11)、金属最作、山师履约、分散取引。
  • コア:五年京アニメーション(手机上海式京アニメーション)、遅延メッセージ(超時安全应用)、分级重语 +死信正視场、アリババ双11トラフィック検証後、踩坑低コスト。
  • 鸿坑全警:社区電影ダウンロードは弱いですが、国公司が好んで、中国語の結果。

3.5 パルサー: オプション

  • 該当するシナリオ:云原生 K8s 導入、多税 SaaS。
  • コア: 計算メモリ分離アーキテクチャ、百万レベルの QPS、云原生诉求に適しています

3.6 風景

シーン 誰を選ぶか 一言理由
微服务解解、异步报话、IoT機器が接続されています 🐰 うさぎMQ 複数の契約、軽量な導入、柔軟なルーティング
ログ収集、リアルタイムフロー処理、ユーザー行動分析 🐘 カフカ 吞吐量纆去、生態的に豊か
金融取引、注文履行、分散取引 🚀 ロケットMQ 事年最了 + 电影双写 + 中文電影
云原生 K8s導入、多租户SaaS 🟣パルサー ストレージ分離計算、100万级QPS

「型三原則」をもう一度強調します。轻量轻量落地、事务解观/运动异步 → RabbitMQ;Java テクノロジースタック、コアビジネスリンク、务リンク、务リンク、事傱鼋朱栈、朱栈上海格步;Java RocketMQ;ビッグデータシーン、海量品/埋点、ストリーム計算 → Kafka。


四、电影电影实战亮点(コードを見せて)

光モジュールのコンセプトは、電気エフェクトの小さな部分を手動で書き出すことができる電気エフェクトです。

4.1 RabbitMQ: メッセージが失われる

制作端:確認確認+メッセージ

これは RabbitMQ のコア構成であるため、メッセージが失われる可能性があります。

@Configuration
public class RabbitReliableConfig {
    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory factory) {
        RabbitTemplate template = new RabbitTemplate(factory);
        // 开启发布确认:消息到达 Broker 触发回调
        template.setConfirmCallback((correlationData, ack, cause) -> {
            if (!ack) {
                log.error("消息投递Broker失败, id:{}, 原因:{}", correlationData.getId(), cause);
                // 业务补偿:重发或入库告警
            }
        });
        // 开启消息退回:路由不到队列时触发(必须配合 mandatory=true)
        template.setReturnsCallback(returned -> {
            log.error("消息路由失败, 交换机:{}, 路由键:{}", returned.getExchange(), returned.getRoutingKey());
        });
        template.setMandatory(true);
        return template;
    }
}

長時間持続するキュー + 正確なルーティング

@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue orderQueue() {
        // 持久化队列,服务重启不丢消息
        return new Queue("order.queue", true, false, false);
    }

    @Bean
    public DirectExchange orderExchange() {
        return new DirectExchange("order.exchange");
    }

    @Bean
    public Binding binding(Queue orderQueue, DirectExchange orderExchange) {
        // 精准路由:routingKey = "order.create"
        return BindingBuilder.bind(orderQueue)
                .to(orderExchange)
                .with("order.create");
    }
}

// 生产者:开启 Publisher Confirm,确保消息不丢
@Component
public class OrderProducer {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendOrder(Order order) {
        rabbitTemplate.convertAndSend("order.exchange", "order.create", order);
        // 异步等待 ACK,失败自动重试
        rabbitTemplate.setConfirmCallback((correlation, ack, cause) -> {
            if (!ack) {
                log.error("消息投递失败: {}", cause);
                // 重试逻辑...
            }
        });
    }
}

死信端:手動確認+死信時間

@RabbitListener(queues = "order.queue")
public void onMessage(Message message, Channel channel) throws IOException {
    long tag = message.getMessageProperties().getDeliveryTag();
    try {
        orderService.process(new String(message.getBody()));
        channel.basicAck(tag, false);
    } catch (Exception e) {
        // 不重回队列,进入死信队列
        channel.basicNack(tag, false, false);
    }
}

テクノロジー:これらの不可能な重语、英語 basicNack 後名後死信正语、便宜安全比了または手机重语、1 つのメッセージを避ける

4.2 RocketMQ トランザクション: 分散トランザクション

これが、Kafka とは異なる RocketMQ の核となる利点です。

痛み:Users下单後支持件、在線上事动(劇情电影)および送信メッセージ(戣进発行ストーリー)および手成的ストーリー情) 注文を保存するにはどうすればよいですか?

テクノロジー:二電影官方(半杂京)+ 云局回更多机。 完全なプロセスは次のとおりです。

画像

春のクラウド実現:

@Service
public class OrderTxProducer {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    // 发送事务消息
    public void createOrderTx(Order order) {
        String txId = UUID.randomUUID().toString();
        Message msg = MessageBuilder.withPayload(JSON.toJSONString(order))
                .setHeader(RocketMQHeaders.TRANSACTION_ID, txId)
                .build();
        // 发送半消息 + 绑定本地事务执行器
        rocketMQTemplate.sendMessageInTransaction("order_topic", msg, order);
    }

    // 本地事务监听器
    @RocketMQTransactionListener
    public class OrderTxListener implements RocketMQLocalTransactionListener {
        // 执行本地事务
        @Override
        public RocketMQLocalTransactionState executeLocalTransaction(Message msg, Object arg) {
            try {
                Order order = (Order) arg;
                orderService.createOrder(order); // 执行本地订单创建
                return RocketMQLocalTransactionState.COMMIT; // 提交半消息
            } catch (Exception e) {
                return RocketMQLocalTransactionState.ROLLBACK; // 回滚半消息
            }
        }
        // 事务回查:解决本地事务执行状态未知的异常场景
        @Override
        public RocketMQLocalTransactionState checkLocalTransaction(Message msg) {
            String txId = msg.getHeaders().get(RocketMQHeaders.TRANSACTION_ID).toString();
            boolean success = orderService.checkTxStatus(txId);
            return success ? RocketMQLocalTransactionState.COMMIT
                           : RocketMQLocalTransactionState.ROLLBACK;
        }
    }
}

原生 API 版电影(注記 UNKNOW 電影、電影加分点を使用):

// 1. 发送半事务消息 (Half Message)
TransactionMQProducer producer = new TransactionMQProducer("tx_group");
producer.setTransactionListener(new TransactionListener() {

    // 2. 执行本地事务 (创建订单)
    @Override
    public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
        try {
            // 写数据库: 订单表 (状态: 待支付)
            boolean success = orderService.createOrder();
            if (success) {
                return LocalTransactionState.COMMIT_MESSAGE; // 提交消息,库存系统可见
            }
            return LocalTransactionState.ROLLBACK_MESSAGE;
        } catch (Exception e) {
            return LocalTransactionState.UNKNOW; // 未知状态,等待 Broker 回查
        }
    }

    // 3. 回查机制 (关键点!防止进程崩溃导致事务悬挂)
    @Override
    public LocalTransactionState checkLocalTransaction(MessageExt msg) {
        String orderId = msg.getUserProperty("orderId");
        // 查数据库订单状态
        if (orderService.checkOrderStatus(orderId)) {
            return LocalTransactionState.COMMIT_MESSAGE;
        }
        return LocalTransactionState.ROLLBACK_MESSAGE;
    }
});

インタビュアー: なぜ確認する必要があるのですか? ブローカーがメッセージの半分を送信した後、プロデューサのプロセスがクラッシュし、ネットワークが中断されると、コミット/ロールバック コマンドは常にブローカーから遠く離れてしまい、トランザクションは「一時停止」されるためです。ブローカーはプロデューサのローカル トランザクション ステータスを定期的にチェックすることしかできず、その結果に基づいてコミットするか破棄するかを決定します。

4.3 Kafka: 并火生成 + 手動送信 + 幹火消費

电影端:幂等电影者 + 京年(一度だけの电影)

問題を複製したメッセージの生成を解くと、除算のメッセージのアトムが書き込まれ、電流が 1 回だけ書き込まれていることがわかります。

@Configuration
public class KafkaIdempotentConfig {
    @Bean
    public ProducerFactory producerFactory() {
        Map props = new HashMap<>();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);

        // 核心1:开启幂等生产者,解决单分区内消息重复
        props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true);
        // 幂等性依赖配置
        props.put(ProducerConfig.ACKS_CONFIG, "all");
        props.put(ProducerConfig.RETRIES_CONFIG, 3);
        props.put(ProducerConfig.MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION, 5);

        // 核心2:开启事务,实现跨分区原子写入
        props.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, "business_tx_001");

        return new DefaultKafkaProducerFactory<>(props);
    }

    // 事务内原子发送多分区消息
    @Transactional(transactionManager = "kafkaTransactionManager")
    public void sendAtomically(String topic1, String data1, String topic2, String data2) {
        kafkaTemplate.send(topic1, data1);
        kafkaTemplate.send(topic2, data2);
    }
}

制作端:高吞吐画像

@Configuration
public class KafkaProducerConfig {

    @Bean
    public ProducerFactory producerFactory() {
        Map props = new HashMap<>();
        props.put("bootstrap.servers", "kafka1:9092,kafka2:9092");
        // acks=all:所有副本写入成功才返回,可靠性拉满
        props.put("acks", "all");
        // 批量发送16KB,配合零拷贝,吞吐直接起飞
        props.put("batch.size", 16384);
        props.put("linger.ms", 5);
        // 自动重试3次
        props.put("retries", 3);
        return new DefaultKafkaProducerFactory<>(props);
    }
}

设计端: 手動コミット + Redis 幂等去重

spring.kafka.consumer.enable-auto-commit: false
spring.kafka.listener.ack-mode: manual
spring.kafka.consumer.properties.isolation.level: read_committed
@KafkaListener(topics = "order-topic", groupId = "order-group")
public void onMessage(ConsumerRecord record, Acknowledgment ack) {
    String orderId = record.key();
    // 幂等:Redis setIfAbsent 去重
    Boolean first = redisTemplate.opsForValue()
        .setIfAbsent("order:consumed:" + orderId, "1", Duration.ofHours(24));
    if (Boolean.TRUE.equals(first)) {
        orderService.process(record.value());
    }
    // 重复消息直接确认丢弃
    ack.acknowledge();
}

テクノロジー: 设计安全电影(enable-auto-commit: false)+ 手動確認 + Redis setIfAbsent 幂等去重、複合 read_committed 分離レベルにより、メッセージが失われないことが保証されます。

4.4 Kafka 零贝原理 深泖

カフカはカフカの秘密の一つです。 sendfile システムはユーザーの状態を 2 回コピーしていました。

传统四次拷贝: DMA→内核Buffer → CPU→用户Buffer → CPU→内核Buffer → DMA→NIC
Kafka零拷贝:  DMA→内核Buffer → DMA→NIC(sendfile系统调用,只需2次切换)
段階 従来のIO(4次サンプル贝) Kafka 零贝(sendfile)
1回目 ディスク→コアバッファ (DMAコピー贝) ディスク→コアバッファ (DMAコピー贝)
2回目 電影電影区 → 電影電影区(CPU贝) スキップされました。データはユーザーフレンドリーではありません
3回目 電影安全区 → カーネルソケット管理区(CPU 管理区) 飛び越える
4回目 カーネルソケットバッファ → 网卡(DMA コピー贝) 電影安全区 → 网卡(DMA コピー贝)

データは常にカーネル状態にあり、CPU はトランスポートに関与せず、コンテキストは 4 回から 2 回に変更されます。つまり、Kafka は通常のマシンで使用でき、最下層の何百万ものレベルを実行できます。


五、メッセージの信頼性: 4層阘線

メッセージの信頼性は単一の問題ではなく、単一の関係にあります。

画像

阘線解读:

  1. 生産検証メカニズム:RabbitMQ の確認応答、Kafka の acks=all、RocketMQ の同期送信により、メッセージが実際にブローカーに到達したことが保証されます。
  2. 仲介業者 長期+複数品:Kafka多品上生、RocketMQ同期ブラシ(SYNC_FLUSH)+同期二重書き込み(SYNC_MASTER)、RabbitMQ電影匁+映像。
  3. 消費量を手動で確認する:先电影上海,再电影offset/ack,杜绝「時間间支件就安全」。
  4. 仕事:MQユニバーサルのみ保証少なくとも1回、可投送靠上海上氷等收口。

この 4 番目の層は、メッセージの信頼性を測定する機能です。


六、電影落下地運動点与方式(電視高成分)

実際の制作では、光会选型下ダウンロード、还得能「塑坑」。これは 7 个阿皾点丏〾点高清高の最高頻度です。

全体図

# 技術は難しい 本質的な問題 解決
1 メッセージが失われました 生産、保管、消費、3つのリンクが可能 電影端電影 + ブローカー電影化品 + 電影端手机 Ack
2 リピート消費 MQ のみ保証 少なくとも 1 回,网络抖动/电影最作重投 幂等:唯一のキーは去重、データベースが唯一の制約、マシンの状態
3 メッセージ 消費能力不足、異常消費は蓄積につながる 杊容安全、一時異動、大量消費、TTL + 死信 + 告警
4 メッセージの順序 多分/多小是電影错乱 同じビジネス ロゴが同じキュー/ゾーニングにルーティングされ、単一スレッドが消費されます。
5 分散型ビジネス 地頭と最名合の時間に水化 RocketMQ 事力最合 / 地地最合表 / Seta
6 メッセージを遅らせる 最後の作钢手机可時間後投老 RocketMQ 18段遅延 / RabbitMQ TTL + 死信
7 运维電影直区 见布、ブローカーの過失は意味がない Prometheus + Grafana モニターのキューの深さ、消費遅延

难点一: メッセージが失われました 💔

現象:プロデューサーは電力を発行せず、ブローカーは、消費者は最後まで応答せず、世界中が代償です。

パートソリューション:

  • 生産:英语 acks=all(Kafka) または SYNC_MASTER ダウンロード主(RocketMQ)、设计重语方法;RabbitMQ アニメ確認 + 必須。
  • ブローカー端RocketMQ 特性ダウンロード SYNC_FLUSH 電子ブラシカバー(電子水パソコン用);Kafka と品数 ≥ 3 min.insync.replicas=2;RabbitMQ 注意——普通もっと多机不计算机不佢,要用ミラーキュー(Mirror Queue)/ミラーキュー,メイン ノードはノードから自動的にアップグレードされます。
  • 消費:先電気上海、さらにオフセット(少なくとも 1 回)、これらの等価電気;RabbitMQ 用電気基本 Ack。

3 つの MQ の両方が可能な最終作:RabbitMQ 構成は最も柔軟であり、RocketMQ チャネルです。

难点二:反復消費(幂等性)🔄

現象: 网络抖動电影手机拉上但官方補償失敗、または再調整による重複拉取、同じメッセージ衄メッセージメッセージ

解決(三板斧等三板斧):

  • ユニークID去重:用上海公司全家(如可以ID)+ Redis setNX またはデータベースのみのインデックスを行ってください。
  • データベースのみの制約: 挿入すると、唯一のインデックスのみが自然に重複をインターセプトします。
  • ステータスマシンスクール:業務状況に応じて、支払電文が「已支果」状態など、既に処理済みで再処理できないかを判断します。

注: Kafka 的幂等電視者のみが解決します生産一回分でもいいし、本体をダウンロードして上にダウンロードしてもよい。

难点三:最合電影(バックログ)🐢

現象:消費端末機または消費速度が遅すぎるため、メッセージが山積みになっています。

解決:

  • 携帯電話の消費者の例—— 重要な前提に注意してください。小数電影了设计上行度,小数数,杊消費者不用! Kafka が最初に拡張され、RocketMQ は位点重置、バッチ消費、高速リカバリをサポートします。
  • 降级時間路:一時的に確立されたタイムルートで、電子化されたメッセージを新しいサブジェクトに渡し、タイムパスを経由して新しいデータを再生成します。
  • 論理消費を最適化する:バッチ処理、非コアロジックのダウングレード。
  • 兜底機構: 適切な TTL + 死信安兜底 + 设计告警(标行 > 10万微字)を設定します。

3 つの MQ 比較:RocketMQ/Kafka は復元が速い;RabbitMQ の単一キューの上限が低く、回復後の蓄積圧力が遅い。これも大規模なフローの蓄積圧力シナリオには適していません。

难点四:ダウンロード電視性 📏

現象:电影电影电影电影(ストーリー情→支果→全線)、メッセージ乱序は異常状態につながります。

解決(コア思路:同じビジネス ID を持つメッセージが同じキュー/パーティションにルーティングされ、単一スレッドで消費される):

  • カフカ: 送信時にパーティションキー(例电影ID)を指定し、同じオーダーがパーティションと同じであること、同じオーダーの消費量がオーダーと同じであることを確認してください。
  • ロケットMQ:MessageQueue 设计计,设计端使用 MessageListenerOrderly、上海 ID ルーティングを設定します。
  • ラビットMQ:単一キュー + 単一コンシューマ、全体の順序を保証できますが、低フローと強いフローにのみ適しています

难点五:分散トランザクションは同一である

現象:公示画像上標準製造の電影のストーリーを主に説明

解決:

  • RocketMQ トランザクション:原生手机半移行 + 云アニメーション回更多、開発コストが最も低く、第一選択。
  • 地地上海表+タイムスキャン補正:RabbitMQ/Kafka にはメッセージ送信時の一般的なスキームがありません
  • 発信箱法字(送信所): ビジネス テーブルとメッセージ テーブルは同じローカル トランザクションに書き込まれ、メッセージ テーブルは独立したコンポーネントによって読み取られます。
  • ATモードを設定する:マルチサービスのビジネスシナリオについての強力な合意が必要です。

难点六: メッセージの遅延

現象:手机手机最好時间後才投老、典型的なシナリオは「下单30分未最术電視」㏖シナリオです

解決:

  • ロケットMQ:原生サポート 18 個の電子、5.0 バージョンは任意の時間遅延をサポートし、オープンボックスの即時に使用します。
  • ラビットMQ:TTL + 死信死信安全電影、設定しかし完全在中 (手机设计级TTL の队头校塞题设计)。
  • カフカ:無原生サポート、実現するには追加コンポーネント(例:時間藴轮 + 外部ストレージ)が必要です。

难点七:运维电视直区

現象: 小是生情了没人是是,ブローカーハング了才水了。

解決:Prometheus + Grafana は、キューの深さ、消費遅延、ブローカーの健全性ステータス、構成スタックしきい値の警告アラートを監視します。モニタリングは锦上添花ではなく、本番環境の保護命名です。


七、電影官追问国判と回答テンプレート

質問に対する標準的な回答を用意し、それをそのまま面接に当てはめました。

追问一:「ビジネスをしているとしたら、何をしていますか?」

この状況を考慮してみます混合アーキテクチャ——Kafkaはデータ収集とフロー処理を行い、RocketMQのコアトランザクションリンクのトランザクションメッセージを実現します。 たとえば、電気事業:Kafka法住10万クラスの埋点ログ、RocketMQは注文、支払いトランザクションの一貫性を保証します。

追问二:「私たちのチームは Java を使用しています、なぜ直接 RocketMQ を選択しないのですか?」

RocketMQ は確かに Java フレンドリーで、中国のエコロジーは完璧ですが、私たちのシナリオがログ収集とユーザー行動分析である場合、データ量は数百万レベル/秒であり、Kafka の消費容量とフロー処理エコロジー (Flink/Spark) は RocketMQ とは比較できません。テクノロジーの選択は最良の選択ではなく、最良の選択です。

これら 2 つの答えの本質は、次のとおりです。電気影は教条主ではなく、会議は電気影を行っています——了は业利生と背题演员の分水岭です。


八、電影官电影:加分点在哪

インタビュアーの立場に立って、答えは次のようになります。

  • それは概念ではありません、それは概念ですビジネスシナリオから
  • 比較+決定、明確な構造と表現
  • できるキーコードをコピーする,ビデオ電影落地过
  • 積極的に言及されたテクノロジーとソリューション、奥行きを反映する
  • プロジェクトで実際の選択ケースを再度組み合わせると、たとえば「トランザクション メッセージが必要で、注文のキャンセルに時間がかかるため、注文システムは RocketMQ を選択しました」と、その効果はすぐに現れます。

九、文章要約

追求"灵活轻量多协议"  → RabbitMQ 🐰
追求"高吞吐大数据流"  → Kafka    🐘
追求"金融级可靠事务"  → RocketMQ 🚀
追求"云原生全能扩展"  → Pulsar   🟣

選択原則:上海最高、次之、电视电影画像を事前に設定し、設定を再設定し、見てみます。この 3 回の評価を行うことができ、80 分間見続けることができます。

最後に、アドバイスが 1 つあります。実際の構造は、多くの場合、併用——用Kafka接资料(南京、倧点))、RocketMQを使用して上上上海アニメーション电影(注文、支払い)。


最後に書きました

選択のメッセージは、表面上の MQ パラメータの 3 つのパラメータ間の違いであり、実際のパラメータは第三者上にあります。ビジネスシナリオの理解、テクノロジーの理解、生産上の問題の理解。

パラメータ背得再熟、答不出「なぜ」も是及格;能从推变特型、用存得电影落地、拿塗坑全地兜底、所么是设计官眼前一亮的答。


この文章がお役に立てましたら、私の公式ウェブサイト【Java’s Great Path of Rain】をぜひご覧ください。
Java イメージ、ソースコード、高頻度のパフォーマンスに注目して、「Java」ブラウザを「大規模サポート」として維持します。

Leave a Reply

Your email address will not be published. Required fields are marked *

애벗잡담 애벗태양새 애벗얼가니새 애벗찌르레기 압드알쿠리참새 압딤황새 아버데어시스티콜라 이상한덤불개개비 아버트북미멧새 아비시니아캣버드 아비시니아크림슨윙 아비시니아지상코뿔새 아비시니아지상지빠귀 아비시니아긴발톱할미새 아비시니아올빼미 아비시니아파랑새 아비시니아낫부리새 아비시니아슬레이티딱새 아비시니아지빠귀 아비시니아왁스빌 아비시니아딱새 아비시니아동박새 아비시니아딱따구리 아카시아얼룩바벳 아카시아박새 아카디아딱새 아체직박구리 도토리딱따구리 아크레앤트슈라이크 아크레토디타이런트 아다마와멧비둘기 애들레이드솔새 아델리펭귄 애드미럴티매미새 아페프비둘기 아프간잡담 아프간눈참새 아프리카줄무늬올빼미 아프리카검은오리 아프리카검은칼새 아프리카푸른딱새 아프리카푸른박새 아프리카넓적부리새 아프리카시트릴 아프리카목걸이멧비둘기 아프리카뜸부기 아프리카크림슨윙핀치 아프리카뻐꾸기 아프리카뻐꾸기매 아프리카뱀목새 아프리카사막솔새 아프리카어두운색딱새 아프리카난쟁이물총새 아프리카에메랄드뻐꾸기 아프리카발가락물닭 아프리카파이어핀치 아프리카물수리 아프리카꾀꼬리 아프리카참매 아프리카풀올빼미 아프리카녹색비둘기 아프리카회색딱새 아프리카회색코뿔새 아프리카회색딱따구리 아프리카하리어매 아프리카매수리 아프리카산잡담 아프리카호비매 아프리카후투티 아프리카물꿩 아프리카습지하리어 아프리카올리브비둘기 아프리카대머리황새 아프리카검은머리물떼새 아프리카종려칼새 아프리카긴꼬리딱새 아프리카펭귄 아프리카피쿨렛 아프리카얼룩코뿔새 아프리카얼룩할미새 아프리카종달할미새 아프리카팔색조 아프리카 난쟁이거위 아프리카난쟁이물총새 아프리카뜸부기 아프리카붉은눈직박구리 아프리카갈대개개비 아프리카강제비 아프리카바위종다리사촌 아프리카성스러운따오기 아프리카소쩍새 아프리카때까치딱새 아프리카은부리참새 아프리카제비물떼새 아프리카도요 아프리카저어새 아프리카점박이나무타기 아프리카검은딱새 아프리카물닭 아프리카지빠귀 아프리카볏도요 아프리카숲올빼미 아프리카노랑개개비 아가미왜가리 날렵한박새티란트 아기구안갈대개개비 아굴라스긴부리종다리 아한타뿔메추라기 아인리바다제비 아케케에 아키아폴라아우 아키키키 아코헤코헤 아쿤수리올빼미 알라고아스개미굴뚝새 알라고아스쿠라소 알라고아스잎수집새 알라고아스티라눌렛 알라오트라논병아리 알베르틴올빼미 알베르틴그을음부부 알버트거문고새 알다브라덤불개개비 알다브라드롱고 알다브라포디 알다브라동박새 오리나무딱새 알류샨제비갈매기 알렉산드리아앵무 알제리동고비 앨런뜸부기 앨런벌새 알파우아요개미새 알로르부북올빼미 알로르미조멜라 알프스바위종다리 알프스노랑부리까마귀 알프스잎개개비 알프스종다리사촌 알프스칼새 알프스지빠귀 알스트롬개개비 알타플로레스타개미팔타 알타이바위종다리 알타이눈닭 알타미라꾀꼬리 알타미라노랑목솔새 아마미지빠귀 아마미산도요 아마니태양새 아마질리아벌새 아마존물총새 아마존개미팔타 아마존개미때까치 아마존줄무늬나무타기 아마존검은티란트 아마존굵은부리멧새 아마존이네지아 아마존모트모트 아마존난쟁이올빼미 아마존왕딱새 아마존덤불딱새 아마존줄무늬 개미굴뚝새 아마존트로곤 아마존우산새 암본동박새 암보이나뻐꾸기비둘기 아멜린칼금칼새 미국장다리물떼새 미국외양간올빼미 미국덤불해오라기 미국검은오리 미국검은칼새 미국긴꼬리박새 미국물닭 미국까마귀 미국물까마귀 미국어두운색딱새 미국홍학 미국황금물떼새 미국금방울새 미국회색딱새 미국재갈매기 미국황조롱이 미국검은머리물떼새 미국보라물닭 미국난쟁이물총새 미국홍꼬리딱새 미국울새 미국세발가락딱따구리 미국나무참새 미국흰따오기 안다만쏙독새 안다만소쩍새 안다만뱀수리 안다만샤마 안다만쇠오리 안다만나무까치 안다만멧비둘기 안다만딱따구리 안데스장다리물떼새 안데스바위새 안데스콘도르 안데스물닭 안데스오리 안데스에메랄드벌새 안데스홍학 안데스딱따구리 안데스기러기 안데스구안 안데스갈매기 안데스힐스타벌새 안데스따오기 안데스라니소마 안데스도요물떼새 안데스모트모트 안데스네그리토 안데스잉꼬 안데스포투 안데스난쟁이올빼미 안데스방울새 안데스회색지빠귀 안데스솔리테어 안데스제비 안데스칼새 안데스쇠오리 안데스티나무 안데스박새가시꼬리 앙골라바티스 앙골라동굴딱새 앙골라종다리 앙골라회색딱새 앙골라제비 앙골라왁스빌 뱀목가마우지 아니아니아우 안주안덤불개개비 안주안소쩍새 안주안태양새 안코베르카나리아 안남프리니아 안나벌새 안노본긴꼬리딱새 안노본동박새 안소르게그린불 남극슴새 남극프리온 남극가마우지 남극제비갈매기 개미핥기딱새 개미먹이딱새 앤서니쏙독새 안틸레스볏벌새 안틸레스유포니아 안틸레스망고벌새 안틸레스밤칼새 안틸레스야자칼새 안틸레스피쿨렛 안틸레스방울새 안티오키아솔털딱새 안티오키아덤불멧새 안티오키아굴뚝새 안티포드알바트로스 안티포드잉꼬 아파파네 끝무늬딱새 아플로마도매 아포마이나 아포태양새 아폴리나르굴뚝새 아폴로코팅가 사도새 아퍼트테트라카 살구색가슴 태양새 아푸리막덤불멧새 아푸리막가시꼬리 물개개비 아라비아바위종다리 아라비아잡담조 아라비아느시 아라비아황금참새 아라비아황금날개콩새 아라비아자고새 아라비아소쩍새 아라비아카나리아 아라비아개개비 아라비아왁스빌 아라비아검은딱새 아라비아딱따구리 아라푸라부채꼬리딱새 아라푸라때까치딱새 아라리페마나킨 아라우카리아박새가시꼬리 아치볼드바우어새 아치볼드뉴토니아 아치볼드쏙독새 아치볼드올빼미쏙독새 아처말똥가리 아처지상울새 아처종다리 북방홍방울새 북극제비갈매기 북방개개비 아르팍아스트라피아 아르팍고양이새 아르팍꿀빨이새 아리푸아나개미굴뚝새 애리조나딱따구리 아르메니아갈매기 아르노딱새 화살무늬피쿨렛 화살무늬개개비 화살무늬잡담조 어센션뜸부기 어센션군함조 어센션해오라기 아샴부웃음지빠귀 재색가슴개미굴뚝새 재색가슴시에라핀치 재색가슴박새티란트 재색눈썹가시꼬리 재색뻐꾸기 재색타파쿨로 애시종다리 재색목개미굴뚝새 재색목카시오르니스 재색목뜸부기 재색목딱새 재색목모기잡이새 재색날개개미굴뚝새 재색직박구리 재색시스티콜라 재색공주딱따구리 재색꽃새 재색딱새 재색미니벳 재색미조멜라 재색프리니아 재색울새 재색찌르레기 재색바다제비 재색재단사새 재색지빠귀 재색박새 재색숲비둘기 재색딱따구리 재색숲제비 재색배 동박새류 회색가슴딱새 회색머리종다리종박새 회색얼굴올빼미 회색이마직박구리 회색머리잡새 회색머리기러기 회색머리초록비둘기 회색머리그린릿 회색머리웃음지빠귀 회색머리타이라눌렛 회색목덤불타나저 회색목부리딱새 회색목개개비 아시아줄무늬올빼미 아시아갈색딱새 아시아진홍날개되새 아시아사막개개비 아시아도요타시 아시아에메랄드뻐꾸기 아시아요정파랑새 아시아광택찌르레기 아시아황금베짜기새 아시아집제비 아시아코엘 아시아대머리황새 아시아야자칼새 아시아붉은눈직박구리 아시아장미되새 아시아짧은발가락종다리 아시아짧은꼬리개개비 아시르까치 아삼웃음지빠귀 대서양노랑코알바트로스 아틀라스딱새 산호섬과일비둘기