消息队列
IT面试
929 ·
0 ·
2023-02-08 16:49:51
最新编辑原因:

为什么会有消息系统(优点)

  1. 解耦

  2. 削峰
    先用队列承接,后面慢慢消费

  3. 异步

    • 订单下单

    • 为啥不使用线程?

天然广播📢 (发布)

各取所需(订阅)

天然的涉及到分布式事务

使用消息队列带来的问题(缺点)

  1. 消息的重复消费
    解决:

    1. 业务端保持幂等性

    2. 消息表,使用msgId做主键或者唯一约束

  2. 消息丢失
    如何解决?先入事务表

  3. 消息的顺序消费
    场景: 例如订单创建、支付、发货、收货是有顺序的

    • 消息的顺序发送:让同一个订单发送至同一个队列,而不是这个订单的消息发送到多个队列,这样在同单号的业务主线中就保证了消息的顺序性

    • 消息的顺序消费:顺序消费有消费者业务保证(Hash等操作都可以完成)

  4. 哪些场景会产生消息重复?

    1. 网络闪断

    2. ACK返回失败

Kafka

  1. Kafka丢数据、重复消费、顺序消费的问题
    Kafka 中 Partition(分区)是真正保存消息的地方,我们发送的消息都被放在了这里。而我们的 Partition(分区) 又存在于 Topic(主题) 这个概念中,并且我们可以给特定 Topic 指定多个 Partition

  2. 配置 acks = all 代表则所有副本都要接收到该消息之后该消息才算真正成功被发送

  3. 我们不能默认在调用send方法发送消息之后消息消息发送成功了。为了确定消息是发送成功,我们要判断消息发送的结果。但是要注意的是 Kafka 生产者(Producer) 使用 send 方法发送消息实际上是异步的操作,我们可以通过 get()方法获取调用结果

  4. Kafka的底层数据结构

  5. kafka怎么做到基于磁盘却比内存还快?

    1. 顺序读写

    2. 零拷贝。零拷贝(Zero-Copy)是一种 I/O 操作优化技术,可以快速高效地将数据从文件系统移动到网络接口,而不需要将其从内核空间复制到用户空间。

      并不是所有的操作系统都支持这一特性,目前只有在使用 NIO 和 Epoll 传输时才可使用该特性
      零拷贝技术原理: https://juejin.cn/post/6995519558475841550

  6. Kafka 的多副本机制了解吗?带来了什么好处?

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

    • Kafka 通过给特定 Topic 指定多个 Partition, 而各个 Partition 可以分布在不同的 Broker 上, 这样便能提供比较好的并发能力(负载均衡)。

    • Partition 可以指定对应的 Replica 数, 这也极大地提高了消息存储的安全性, 提高了容灾能力,不过也相应的增加了所需要的存储空间。


本作品系原创,采用《署名-非商业性使用-禁止演绎4.0 国际》许可协议.转载请说明出处
本文链接:https://www.upupor.com/u/3avd1Xg 复制

无内容

推荐阅读