消息中间件-面试题

本文深入探讨了Kafka与RocketMQ的消息中间件特性,包括Kafka的可靠性保证、架构、消费者模式、Zookeeper作用、消息顺序与幂等性、分区Leader选举,以及RocketMQ的特点、架构、事务性消息和持久化机制。这些知识点对于理解消息中间件的面试题至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MQ选择

一、Kafka

1、kafka是什么以及应用场景

  • 分布式流式处理平台,一种高吞吐量、分布式、基于发布/订阅的消息中间件,Apache开源项目
    • 消息队列
    • 容错的持久方式存储记录消息流:Kafka 会把消息持久化到磁盘
    • 流式处理平台:在消息发布的时候进行处理,Kafka 提供了一个完整的流式处理类库
  • 场景
    • 消息队列:建立实时流数据管道,以可靠地在系统或应用程序之间获取数据。
    • 数据处理: 构建实时的流数据处理程序来转换或处理数据流。

2、kafka消息模型

  • 发布订阅模型
  • 使用主题(Topic) 作为消息通信载体,类似于广播模式;发布者发布一条消息,该消息通过主题传递给所有的订阅者,在一条消息广播之后才订阅的用户则是收不到该条消息的在发布 - 订阅模型中,如果只有一个订阅者,那它和队列模型就基本是一样的了。所以说,发布 - 订阅模型在功能层面上是可以兼容队列模型的。

  • RocketMQ 的消息模型和 Kafka 基本是完全一样的。唯一的区别是 Kafka 中没有队列这个概念,与之对应的是 Partition(分区)。

3、Kafka架构

  • broker: Kafka服务器,负责消息存储和转发,一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。
  • topic:消息类别,Kafka按照topic来分类消息,可以理解为一个队列,一个 Topic 又分为一个或多个分区
  • partition: topic的分区,一个topic可以包含多个partition, topic 消息保存在各个partition上。offset:消息在日志中的位置,可以理解是消息在partition上的偏移量,代表该消息的唯一序号
  • Producer:消息生产者,将数据PUSH给broker
  • Consumer:消息消费者,因为Kafka代理是无状态的,这意味着消费者必须通过使用分区偏移来维护已经消耗了多少消息。消费者向broker拉取消息
  • Consumer Group:消费者分组,每个Consumer必须属于一个group,这是 kafka 用来实现一个 topic 消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个 Consumer Group
  • Zookeeper:保存着集群 broker、 topic、 partition等数据;另外,还负责broker故障发现, partition leader选举,负载均衡等功能

4、kafka多副本机制

  • 分区(Partition)中的多个副本之间会有一个叫做 leader 的家伙,其他副本称为 follower。我们发送的消息会被发送到 leader 副本,然后 follower 副本才能从 leader 副本中拉取消息进行同步。

    生产者和消费者只与 leader 副本交互。你可以理解为其他副本只是 leader 副本的拷贝,它们的存在只是为了保证消息存储的安全性。当 leader 副本发生故障时会从 follower 中选举出一个 leader

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值