| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Java中间件面试题(2021最新版) -> 正文阅读 |
|
[大数据]Java中间件面试题(2021最新版) |
前言现今时代,系统越来越复杂,数据来越多,系统间的交互也就变得越来越重要,同时也变得越来越困难。而消息中间件在其中起到了一个中间桥梁的重要作用。因此,面试中也经常会被问到消息中间件相关的问题。从其使用到其原理设计,都会是面试官感兴趣的一个点。本场小编就以zookeeper / RocketMQ 为例,简单介绍消息中间件并在其中穿插面试官常会提及的消息中间件相关的问题,小编这里还总结了一份中间件的思维导图,分享给到大家。 完整版Java面试题地址:2021最新面试题合集集锦。
ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根 据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。 Zookeeper 保证了如下分布式一致性特性: (1)顺序一致性 (2)原子性 (3)单一视图 (4)可靠性 (5)实时性(最终一致性) 客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也 是由所连接的 zookeeper 机器来处理。对于写请求,这些请求会同时发给其他 zookeeper 机器并且达成一致后,请求才会返回成功。因此,随着 zookeeper 的集群机器增多,读请求的吞吐会提高但是写 请求的吞吐会下降。 有序性是 zookeeper 中非常重要的一个特性,所有的更新都是全局有序的,每个更新都有一个唯一的时间戳,这个时间戳称为 zxid(Zookeeper Transaction Id)。而读请求只会相对于更新有序,也就是 读请求的返回结果中会带有这个zookeeper 最新的 zxid。 2. ZooKeeper 提供了什么?(1)文件系统 (2)通知机制 3.Zookeeper 文件系统Zookeeper 提供一个多层级的节点命名空间(节点称为 znode)。与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。 Zookeeper 为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得Zookeeper 不能用于存放大量的数据,每个节点的存放数据上限为1M。 4. ZAB 协议?ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持崩溃恢复的原子广播协议。 ZAB 协议包括两种基本的模式:崩溃恢复和消息广播。 当整个 zookeeper 集群刚刚启动或者 Leader 服务器宕机、重启或者网络故障导致不存在过半的服务器 与 Leader 服务器保持正常通信时,所有进程(服务器)进入崩溃恢复模式,首先选举产生新的 Leader服务器,然后集群中 Follower 服务器开始与新的 Leader 服务器进行数据同步,当集群中超过半数机器与该 Leader服务器完成数据同步之后,退出恢复模式进入消息广播模式,Leader 服务器开始接收客户端的事务请求生成事物提案来进行事务请求处理。 5. 四种类型的数据节点 Znode(1)PERSISTENT-持久节点 除非手动删除,否则节点一直存在于 Zookeeper 上 (2)EPHEMERAL-临时节点 临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与zookeeper 连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。 (3)PERSISTENT_SEQUENTIAL-持久顺序节点 基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。 (4)EPHEMERAL_SEQUENTIAL-临时顺序节点 基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。 6. Zookeeper Watcher 机制 -- 数据变更通知Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据Watcher 通知状态和事件类型做出业务上的改变。 工作机制: (1)客户端注册 watcher (2)服务端处理 watcher (3)客户端回调 watcher Watcher 特性总结: (1)一次性无论是服务端还是客户端,一旦一个 Watcher 被 触 发 ,Zookeeper 都会将其从相应的存储中移除。这样的设计有效的减轻了服务端的压力,不然对于更新非常频繁的节点,服务端会不断的向客户端发送事件通知,无论对于网络还是服务端的压力都非常大。 (2)客户端串行执行 客户端 Watcher 回调的过程是一个串行同步的过程。 (3)轻量 3.1、Watcher 通知非常简单,只会告诉客户端发生了事件,而不会说明事件的具体内容。 3.2、客户端向服务端注册 Watcher 的时候,并不会把客户端真实的 Watcher 对象实体传递到服务端,仅仅是在客户端请求中使用 boolean 类型属性进行了标记。 (4)watcher event 异步发送 watcher 的通知事件从 server 发送到 client 是异步的,这就存在一个问题,不同的客户端和服务器之间通过 socket 进行通信,由于网络延迟或其他因素导致客户端在不通的时刻监听到事件,由于 Zookeeper 本身提供了 ordering guarantee,即客户端监听事件后,才会感知它所监视 znode发生了变化。所以我们使用 Zookeeper 不能期望能够监控到节点每次的变化。Zookeeper 只能保证最终的一致性,而无法保证强一致性。 (5)注册 watcher getData、exists、getChildren (6)触发 watcher create、delete、setData (7)当一个客户端连接到一个新的服务器上时,watch 将会被以任意会话事件触发。当与一个服务器失去连接的时候,是无法接收到 watch 的。而当 client 重新连接时,如果需要的话,所有先前注册过的 watch,都会被重新注册。通常这是完全透明的。只有在一个特殊情况下,watch 可能会丢失:对于一个未创建的 znode的 exist watch,如果在客户端断开连接期间被创建了,并且随后在客户端连接上之前又删除了,这种情况下,这个 watch 事件可能会被丢失。 7. 客户端注册 Watcher 实现(1)调用 getData()/getChildren()/exist()三个 API,传入 Watcher 对象 (2)标记请求 request,封装 Watcher 到 WatchRegistration (3)封装成 Packet 对象,发服务端发送 request (4)收到服务端响应后,将 Watcher 注册到 ZKWatcherManager 中进行管理 (5)请求返回,完成注册。 8. 服务端处理 Watcher 实现9. 客户端回调 Watcher
10. ACL 权限控制机制11. Chroot 特性12. 会话管理13. 服务器角色14. Zookeeper 下 Server 工作状态服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。 (1)LOOKING:寻 找 Leader 状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader 选举状态。 (2)FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。 (3)LEADING:领导者状态。表明当前服务器角色是 Leader。 (4)OBSERVING:观察者状态。表明当前服务器角色是 Observer。 15. 数据同步16. zookeeper 是如何保证事务的顺序一致性的?17. 分布式集群中为什么会有 Master?在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行leader 选举。 18. zk 节点宕机如何处理?19. zookeeper 负载均衡和 nginx 负载均衡区别zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件;但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式。 20. Zookeeper 有哪几种几种部署模式?部署模式:单机模式、伪集群模式、集群模式 21. 集群最少要几台机器,集群规则是怎样的?集群规则为 2N+1 台,N>0,即 3 台 22. 集群支持动态添加机器吗?23. Zookeeper 对节点的 watch 监听通知是永久的吗?为什么不是永久的?24. Zookeeper 的 java 客户端都有哪些?java 客户端:zk 自带的 zkclient 及 Apache 开源的 Curator。 25. chubby 是什么,和 zookeeper 比你怎么看?chubby 是 google 的,完全实现 paxos 算法,不开源。zookeeper 是 chubby的开源实现,使用 zab协议,paxos 算法的变种。 26. 说几个 zookeeper 常用的命令。常用命令:ls get set create delete 等。 27. ZAB 和 Paxos 算法的联系与区别?28. Zookeeper 的典型应用场景Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watcher 事件通知机制,可以非常方便的构建一系列分布式应用中年都会涉及的核心功能,如:
数据发布/订阅 介绍 数据发布/订阅系统,即所谓的配置中心,顾名思义就是发布者发布数据供订阅者进行数据订阅。 目的 动态获取数据(配置信息) 实现数据(配置信息)的集中式管理和数据的动态更新 设计模式 Push 模式 Pull 模式 数据(配置信息)特性 (1)数据量通常比较小 (2)数据内容在运行时会发生动态更新 (3)集群中各机器共享,配置一致 如:机器列表信息、运行时开关配置、数据库配置信息等 基于 Zookeeper 的实现方式 · 数据存储:将数据(配置信息)存储到 Zookeeper 上的一个数据节点 · 数据获取:应用在启动初始化节点从 Zookeeper 数据节点读取数据,并在该节点上注册一个数据变更 Watcher · 数据变更:当变更数据时,更新 Zookeeper 对应节点数据,Zookeeper会将数据变更通知发到各客户 端,客户端接到通知后重新读取变更后的数据即可。 负载均衡 zk 的命名服务 命名服务是指通过指定的名字来获取资源或者服务的地址,利用 zk 创建一个全局的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。 分布式通知和协调 对于系统调度来说:操作人员发送通知实际是通过控制台改变某个节点的状态,然后 zk 将这些变化发送给注册了这个节点的 watcher 的所有客户端。对于执行情况汇报:每个工作进程都在某个目录下创建一个临时节点。并携带工作的进度数据,这样汇总的进程可以监控目录子节点的变化获得工作进度的实时的全局情况。 zk 的命名服务(文件系统) 命名服务是指通过指定的名字来获取资源或者服务的地址,利用 zk 创建一个全局的路径,即是唯一的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。 zk 的配置管理(文件系统、通知机制)程序分布式的部署在不同的机器上,将程序的配置信息放在 zk 的 znode 下,当有配置发生改变时,也 就是 znode 发生变化时,可以通过改变 zk 中某个目录节点的内容,利用 watcher 通知给各个客户端,从而更改配置。 Zookeeper 集群管理(文件系统、通知机制) 所谓集群管理无在乎两点:是否有机器退出和加入、选举 master。对于第一点,所有机器约定在父目录下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper 的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount 又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为 master 就好。 Zookeeper 分布式锁(文件系统、通知机制) 有了 zookeeper 的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。对于第一类,我们将 zookeeper 上的一个 znode 看作是一把锁,通过 createznode的方式来实现。所 有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的 distribute_lock 节点就释放出锁。对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master 一样,编号最小的获得锁,用完删除,依次方便。Zookeeper 队列管理(文件系统、通知机制) 两种类型的队列: (1)同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。 (2)队列按照 FIFO 方式进行入队和出队操作。 第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。 第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。在特定的目录下 创建 PERSISTENT_SEQUENTIAL 节点,创建成功时Watcher 通知等待的队列,队列删除序列号最小的节点用以消费。此场景下Zookeeper 的 znode 用于消息存储,znode 存储的数据就是消息队列中的消息内容,SEQUENTIAL 序列号就是消息的编号,按序取出即可。由于创建的节点是持久化的,所以不必担心队列消息的丢失问题。 RabbitMQ1. 什么是MQMQ就是消息队列。是软件和软件进行通信的中间件产品 2. MQ的优点
3. 解耦、异步、削峰是什么?。
4. 消息队列有什么缺点5. 你们公司生产环境用的是什么消息中间件?
6. Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?7. MQ 有哪些常见问题?如何解决这些问题?8. 什么是RabbitMQ?RabbitMQ是一款开源的,Erlang编写的,消息中间件; 最大的特点就是消费并不需要确保提供方 存在,实现了服务之间的高度解耦 可以用它来:解耦、异步、削峰。 9. rabbitmq 的使用场景(1)服务间异步通信 (2)顺序消费 (3)定时任务 (4)请求削峰 10. RabbitMQ基本概念11. RabbitMQ的工作模式12. 如何保证RabbitMQ消息的顺序性?
13. 消息如何分发?
14. 消息怎么路由?15. 消息基于什么传输?16. 如何保证消息不被重复消费?或者说,如何保证消息消费时的幂等性?17. 如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?18. 如何保证RabbitMQ消息的可靠传输?19. 为什么不应该对所有的 message 都使用持久化机制?20. 如何保证高可用的?RabbitMQ 的集群21. 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,怎么办?22. 设计MQ思路23.RoctetMq的架构
24. RocketMq消息模型(专业术语)
25.核心问题
Rocket MQ 使用排查指南RocketMQ原理及快速入门
发送问题排查
消费问题排查
其他问题排查《RocketMQ技术内幕》第1章 阅读源代码前的准备 第2章 RocketMQ路由中心NameServer 第3章 RocketMQ消息发送 第4章 RocketMQ消息存储 第5章 RocketMQ消息消费 第6章 消息过滤FilterServer 第7章 RocketMQ主从同步(HA)机制 第8章 RocketMQ事务消息 第9章 RocketMQ实战 【完整学习笔记】 Kafka知识汇总Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列, 可以处理大量的数据, 并使您能够将消息从一个端点传递到另一个端点. Kafka适合离线和在线消息消费. Kafka消息保留在磁盘上, 并在群集内复制以防止数据丢失. Kafka构建在ZooKeeper同步服务之上. 它与Apache Storm和Spark非常好地集成, 用于实时流式数据分析. Kafka 依赖于日志顺序写, 因此支持消息回溯和支撑高性能读写 依赖 Zookeeper 基础概念
Rebalance (重平衡)
日志索引高性能, 高吞吐
Page Cache & MMap
最后小编分享的文章到这里就结束了,整理不易,欢迎大家一起交流,喜欢小编分享的文章记得关注我点赞哟,感谢支持哦!!! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 8:48:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |