kafka和rabbitmq面试题

角色

 topic:每一类的消息为一个主题

partition:一个topic可以分多个partition

producer:发布消息    主题生产者

consumer:订阅消息   主题消费者

broker :服务区

kafka

1.什么是kafka 

kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,主要用于处理流式数据.

 2.kafka的作用

缓冲和削峰: 当数据高并发时kafka可以在中间起到一个缓冲作用,把消息暂存在kafka中,服务器可以慢慢处理

解耦和扩展性: 当不确定具体需求,消息队列可以作为一个接口层,解耦重要的业务流程.只要遵守约定,针对数据变成即可获取扩展能力.

冗余: 可以采用一对多的方式,一个生产者发送消息,可以被多个订阅的topic的服务消费到,供多个毫无关系的业务使用.

健壮性: 消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行

异步通信: 处理一些不是必要的数据,缩减用户请求响应时间

 3.kafka中的特性?

1.高吞吐量,低延迟,每个topic可以分多个partition,consumer group 对 partition进行consume操作

2.可扩展性:  kafka集群支持热扩展

3持久性,可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

4.容错性:允许集群中节点失败

5.高并发

6.支持实时在线处理和离线处理

 4.kafka如何保证消息有序

kafka在发送消息的时候可以指定partition,那么所有的消息都是发往同一个partition,就是有序的

5.kafka如何保证数据不丢失 

同步模式下:ack确认机制设置为-1      在发送消息时,需要leader向fllow同步数据完成后,也就时ISR队列中所有的broker全部保存完这条消息后才会像ack发送完成信息

异步模式下:为防止缓冲区慢,可以在配置文件设置不限制阻塞超时时间,当缓冲区满时让生产者一直处于阻塞状态

6.kafka如何保证数据的不重复消费

消息可以使用唯一id,消费过后可以把主键存储到redis中,先查询是否纯在,存在则不处理

  

RabbitMQ

角色

nameServer 注册中心

broker   存放消息

producer 生产消息

consumer  消费消息

 topic:每一类的消息为一个主题

执行流程

broder在启动的时候会像nameserver注册中心组测并定时发送心跳

producer在启动的时候会到nameserver上拉取topic所属的broker具体地址,然后像broker上发送消息

1.rabbitmq的作用

异步    削峰   解耦

2.rabbitmq的使用场景

1.服务间异步通讯

2.拥有持久化的机制,进程消息,队列中的信息也可以保存下来.

3.实现消费者和生产者之间的解耦

4.对于高并发场景下利用消息队列可以使得同步访问变为串行访问达到一定量的限流

5.异步通信: 处理一些不是必要的数据,缩减用户请求响应时间

 3.RabbitMQ如何保证消息的不重复消费

1.在消息生产时MQ内部每条生产者发送的消息生成一个inner-masg-id,作为去重的依据,避免重复的消息进入队列

2.在消息消费时,要求消息中必须有bizid作为去重的依据,避免一条消息被重复消费

 4.RabbitMQ如何保证消息不丢失

丢失分为:生产者丢失,消费者丢失,消息队列数据丢失

生产者丢失:

RabbitMQ提供transaction和confirm模式来确保生产者不丢失消息

transaction机制就是开启事务,出现异常就回滚

config模式用的居多:每条消息都被指派唯一的id,如果消息出现异常则会收到nack消息,之后可以重试

消息队列丢失数据:

开启磁盘持久化配置,在发送消息前数据存储到磁盘中,当发送消息返回失败时重新发送

设置持久化

         1:将query的持久化标志durable设置为true,则代表一个持久的队列

        2.发送消息的时候将delieveryMode设置为2

这样设置即使MQ挂了也能恢复数据

消费者丢失消息:设置为手动回复确认消息

 在这里插入图片描述

4.RabbitMQ的缺点

1.系统可用性降低

2.系统复杂性提高

3.一致性问题

单个消费者来出路对应的单个queue是不会出现消息错乱的问题

5.RabbitMQ的顺序性

 单个消费者来出路对应 的单个queue是不会出现消息错乱的问题

6.RabbitMQ的执行流程

1.注册中心启动,等待Broker,Producer,Consumen连接上报

2.broker启动和所有的注册中心建立长连接,定时发送心跳,心跳信息中包含自己的ip端口,topic信息

3.peoducer发送消息,先跟一台注册中心建立连接,询问topic要发送到哪个borler上,然后和broker建立连接获取消息

4.Consumer获取消息,先向注册中心询问自己监听的哪个topic在哪个borler上然后和broker建立连接获取消息

 Kafka和Raa和RabbitMQ的区别

对比项kafkaMQ
是否支持topic的优先级不支持支持
是否支持消息全局有序不支持支持
是否内置监控
是否支持多个生产者一个topic支持多个生产者
是否支持多个消费者一个topic支持多个消费者
是否支持消息追踪不支持支持
是否支持消费者推模式不支持支持
是否支持消费者拉模式支持支持
是否支持消息分区有序支持支持
是否支持加密支持支持
是否支持广播消息支持支持
是否支持消息回溯支持不支持
是否支持消息持久化支持支持
是否支持消息堆积支持,并批量持久化到磁盘支持,无法较大的堆积消息
是否支持事务行消息支持不支持
元数据管理通过zookeeper进行管理支持消息数据持久
默认服务端口90925672
默认服务端口900015672
网络开销相对较小相对较大
内存消耗相对较小相对较大
cpu小号相对较大

相对较小

实际场景选择

1.在实际应用场景中MQ具有较高的严谨性少数据丢失的可能性较小,Kafka的优势主要体现在吞吐量上,虽然可以通过策略不丢失,但从严谨角度来讲,不如MQ

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值