面试问到Kafka看这一篇就够了

一、介绍下Kafka

在这里插入图片描述
吞吐量高的原因:
1、每个消费者批量读取数据
2、消费者集群的时候每个消费者都能同时消费分区消息
3、生产者发送消息,会放到缓冲区中,缺点是消息容易丢失
4、0拷贝,NIO本身支持,减少了拷贝的次数
5、对数据实现压缩,减少带宽传输

1、第一次:将磁盘文件,读取到操作系统内核缓冲区;
2、第二次:将内核缓冲区的数据,copy到application应用程序的buffer;
3、第三步:将application应用程序buffer中的数据,copy到socket网络发送缓冲区(属于操作系统内核的缓冲区);
4、第四次:将socket buffer的数据,copy到网卡,由网卡进行网络传输。

1、网络数据持久化到磁盘 (Producer 到 Broker)
2、磁盘文件通过网络发送(Broker 到 Consumer)

brokeid的作用
不遵循JMS规范Java消息服务(Java Message Server),只有发布订阅
快速、可扩展
分区

在一套 Kafka 架构中有多个 Producer,多个 Broker,多个 Consumer,每个 Producer 可以对应多个 Topic,每个 Consumer 只能对应一个 Consumer Group。

作者:大数据首席数据师
链接:https://www.jianshu.com/p/4bf007885116
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

二、RabbitMQ为什么不集群?

类似redis分片(16384个卡槽)集群那样是最好的,不会有冗余数据
万一宕机了怎么办?副本存放

三、队列和交换机都会持久化消息吗?

四、名词

Broker: Broker就是表示一个MQ服务器端,多个Broker就是表示多个不同的MQ服务器端形成一个群体;

Topic: 主题 目录 一个MQ服务端可以存放多个不同的主题 每个主题实际就是消息的分类
massage: 就是异步通讯传递的参数

Partition: 分区 多大的群体实现分区 数据库中1000万条数据 分成10表 卡槽

Kafka里面实现分区:一个Broker就是表示一个区域

Producer : 生产者 向MQ投递消息
Consumer : MQ将消息推送消费者消费
Consumer Group: 对我们消费者实现分组
Offset:偏移量 实际就是我们的消息的索引位置

kafaka多了分区和主题,没有队列,发布订阅只有主题

五、分布式事务

解决分布式事务是一种思想和框架无关
常用的解决方案有2PC/3PC/MQ

六、Kafaka为什么依赖Zookeeper

把broker都注册到zk上,这样就集群了,使用节点事件通知告诉broker哪些是群体

因为:
1.kafka会将MQ的信息存放到zk上,消费者也注册到zk上,消费者不关注有几个broke直接从zk上获取信息
2.为了是整个集群能够方便扩展,采用zk的时间通知相互感知

kafka只要修改broke.id区分

七、集群注册是注册到每个节点上还是一个节点就好了?

有主从的是单个节点
向Eureka这样的就是每个节点

八、kafka和rabbitmq的区别

九、kafka如何保证消息顺序性

十、队列和主题的区别

队列:先进先出
主题:对队列实现封装

十一、为什么MQ会产生消息顺序的问题?

产生背景:
1、消费者集群
2、MQ服务器集群

消息不会被打乱的情况:
1、生产者投递的消息在同一个Broker中,且是同一个消费者消费

怎么解决:
1、key相同,hash就相同,此时消息就会投递在同一个Broke中,前提是只有一个消费者
2、

为什么MQ会产生消息顺序的问题?
1、如果生产者往MQ投递消息的行为一样,就不需要考虑顺序问题,行为不一样的时候就要考虑消息的顺序问题
2、MQ存放消息默认的情况下本身就具有一定的顺序,遵循先进先出的原则(单个MQ的情况下)
3、如果有多个消费者订阅同一个队列的情况下,可能会产生消费者顺序会被打乱
4、如果Broker是集群的情况下,因为不同的消息可能会存放在不同的Broker中,单个消费者在获取消息的时候顺序可能会被打乱

如何解决?
保证生产者投递的消息放在同一个Broker中,对应只有一个消费者消费(kafka对消息设置相同的key,就可以保证投递到同一个Broker)
但是单个消费者的吞吐量非常低,可以采用消费者批量获取消息,然后采用内存队列存放(也是根据key计算存入哪个内存队列),每个内存队列只会对应的一个线程实现处理

kafka中每个broker对应一个消费者
在同一个组中,最终只会有一个消费者消费同一个消息

十二、Kafka吞吐量比较高的原因

1、使用顺序写的形式存储我的数据
2、生产者和消费者都支持批量处理,生产者通过异步形式+缓冲区投递消息,缺点:数据可能存在丢失
3、数据的零拷贝,NIO本身就支持
4、实现对Topic分区存放
5、对数据实现压缩,减少带宽传输

十三、

十四、

十五、

十六、

十七、

十八、

十九、

二十、

二十一、

二十二、

二十三、

二十四、

二十五、

二十六、

二十七、

二十八、

二十九、

三十、

发布了52 篇原创文章 · 获赞 2 · 访问量 1864

猜你喜欢

转载自blog.csdn.net/qq_42972645/article/details/104766567