当面试官问为什么选择 Kafka/RabbitMQ/RocketMQ 时,他到底想问什么?

61 天前
 a1oyss0925

今天刚面了一家公司,因为业务中有用到 Kafka ,所以就问了为什么使用这个,与其它中间件横向对比有了解吗。

于是我就从吞吐量、延迟、社区活跃度、开发语言之类的地方简单对比了下,然后说剩下的原因就是因为公司是这个技术栈,正好用来接收上游业务消息,所以选择 Kafka 。

接着对方就结束了这个问题,没有继续往下问,我总感觉他想知道的不是这个,亦或者说这个答案并不充分(我自己其实也有点这么感觉,感觉应该结合下业务之类的)。 如果是想考你技术选型的话,大伙遇到这种问题一般会怎么答

5458 次点击
所在节点    程序员
43 条回复
codegenerator
61 天前
@a1oyss0925 需要深入掌握相关技术的底层和实现原理,需要花费大量的时间研究,甚至是阅读相关代码
网络上很多技术问题其实有很多回答,但是真正靠谱的很少
比如技术选型 kafka 还是 rocketmq ,mysql 还是 postgredb 这一类问题
很多回答其实根本就没把原理和优缺点讲清楚,一方面要掌握原理另一方面也要根据业务场景分析才行
技术并不是一种就比另一种好,只有合适的才是最好的
我可以建一个 qq 群,大家互相探讨技术原理和源码,以及适用场景
870794652
catamaran
61 天前
有时候是面试官想知道答案
cheng6563
61 天前
@lolizeppelin #14 额。erlang 不是专为分布式而生的吗
8355
61 天前
@rqxiao 先说结论我用过的高负载 mq 没有一个开启持久化,redis 也是有 AOF 对吧,你们会开吗?
就算有磁盘持久化也只是另外的程序去异步刷盘,不会是运行一个命令就往磁盘写一次,肯定是每隔一段时间进行一次刷盘操作,道理是通用的,那一旦崩掉重启必然是丢失未刷盘的数据,因为你要从磁盘恢复数据。
mq 默认的刷盘时间是 25ms ,在高并发时期,大量推和大量消费,在海量数据持续刷盘的过程中势必产生额外的 cpu 开销,同时你还得保证你的磁盘 io 一定够用,不然潜在丢失的数据会更多。所以高并发肯定是不开启持久化。

既然在高负载时期崩掉必然会丢失数据,那么从调用 mq 前起码你应该入库以在崩溃时保证数据本身不会彻底丢失,这是最底线,所以也必然有修复丢失数据的机制,消息本身通常是某个微服务的处理结果,也就是说丢失数据本身只是影响的数据的实时性不可能因为 mq 崩溃导致整个系统链路彻底挂掉,消费设计有幂等可以保证上游系统重推也能有数据一致性。在架构设计完整的情况下,我们是不是应该把有限的资源给到关键的队列计算而不是刷盘这种备用方案,我需要的是它不挂而不是挂了尽量少丢数据。这个技术选型的目的就是极致的实时性,挂了就按照各自的业务走备用方案回溯。
zapper
61 天前
@8355 #7 好久没有上 v2 学知识了
fffq
61 天前
公司用啥我用啥
8355
61 天前
@rqxiao mysql 在这个场景更容易理解毕竟是肯定持久化的业务,可以查查 io wait 对 mysql 的影响,相关文档更好找也更容易理解。
wuhunyu
61 天前
@8355 提一个疑问,在高并发情况下,在调用 mq 之前需要入库吗(我没啥高并发的经验,还是比较信任 mq 的)。我的疑问是,既然已经是高并发了,入库算是一个比较耗时的 io 操作了,入库虽然保证了数据的安全性,但也降低了高并发。如果把去掉入库操作,换成 mq 的同步刷盘(或者异步刷盘),两者对比会怎么样呢
codegenerator
61 天前
@wuhunyu 他讲的就是错的,mq 高并发跟数据库就没有关系
k9982874
61 天前
这帖子恍惚回到了疫情前的 v2
daimaosix
61 天前
@8355 而你,我的朋友,让我在 V 站找到了学习的感觉
daimaosix
61 天前
@8355 大佬,安全系统推送威胁信息到 Kafka 还是 RabbitMQ 比较合适?有多个客户端,因为涉及到安全,所以必须快速的生产和消费数据。
daimaosix
61 天前
@8355 威胁数据的量不是特别大,但是也不是特别小,尤其遇到 CC 攻击时可能会生产大量的消息。
darkengine
61 天前
关于选型的问题,多看看 Kafka 和 RabbitMQ (或者任何其他同类技术)的 battle 帖子就能略知一二了。然后再结合实际项目中的经验总结一下。
ivvei
60 天前
我面试人也经常会问些选型问题。主要是想考察这么几点:

1. 看看这个人是否对用到的东西有所思考。我不希望招一个只会让做什么就做什么的纯执行的机器,我希望招的是一个有自己的想法,能不断思考,找到新的好的合适的解决方法的。
2. 看看这个人对手上东西的了解深度。是深入地了解了,还是只会最粗浅的用法。
3. 看看这个人的思路、逻辑。选型嘛,必然有个好坏的比较过程。那么怎么判断哪些是好的是适合自己项目的,在取舍的时候更看重哪一些点。
ivvei
60 天前
@ivvei #35 接上文。

那么这样目的下回答成什么样会得怎样的分呢?

扣分型:
1. 不懂但是要硬拗的。我会觉得这人不实在。
2. 思路混乱的。比如提一些系统的特性但是和自己的目的完全不搭。

不过不失:
1. 说是别人选的,自己只是用。0 分,当我没问过,下一题

得分型:
1. 多少能说出点道理的。理解可能不够深入,或者只会简单使用,但是逻辑能自洽。因为实际项目里用到的东西可能很多,很少有人能了解每个细节,所以有部分理解得比较简单的也是情有可原的。
2. 能精准地点评各类软件的优缺点,并给出充足的选或者不选的依据的。这样的我会给大加分。
wssy001
60 天前
web 后端业务还有用 RabbitMQ ?有这需求为啥不上 RocketMQ
Kafka 和 RocketMQ 的选型就在于你的场景是业务型还是吞吐量优先(比如数据迁移),没记错的话,Kafka 是针对磁盘顺序写入做了优化,topic 一多,性能会低于 RocketMQ
hefish
60 天前
流水线工人面试
车间主任: 请问我们上的了个螺丝钉,为什么要上在火箭发动机的这个位置?能不能上在下面或者上面一点,分别有什么优缺点?
工人: 不为什么,因为螺丝孔在那个位置。。。
Cola98
60 天前
感觉你回答没什么问题,可以从业务场景中出发对比其他中间件,说下为什么使用 kafka ,差不多到这里就可以了。如果还要深入的话,就涉及到相关特点了。
wlm201219
60 天前
大多数情况下,并不是想知道什么。只是搜到的面试题里面正好有这道题就问了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1081344

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX