面试中肯定会被问到MQ方面的问题,那么面试官一定会问你如何保证消息的顺序性,
Q:看你有用到Kafka消息中间件,请问怎么保证消息顺序消费?
A:在发送消息的时候指定同一个key,Kafka分区器会把相同的key分发到同一个分区中,那么消费者消费就能保证顺序消费了。
当你回答这个答案的时候,是不是认为已经好了,图样图森破!
Q:如果这样写入一个分区,就不能并发消费了,有没有可能保证全局顺序也能保证并发消费?
听到这个问题心里是不是有千万个草泥马奔腾,又想马儿长得好,又想马儿不吃草,要不你来告诉我怎么做!
世界上解决一个计算机问题最简单的方法:“恰好”不需要解决它!
记住这句话
有些问题,看起来很重要,但实际上我们可以通过合理的设计或者将问题分解来规避,如果硬要把时间花在解决问题本身,实际上不仅效率低下,而且也是一种浪费。从这个角度来看消息的顺序消费问题,可以总结以下两点:
- 不关注乱序的应用实际大量存在
- 队列无序并不意味着消息无序
所以从业务层面来保证消息的顺序而不仅仅是依赖于消息系统,是不是我们应该寻求的一种更合理的方式?
我们依赖MQ的目的是什么?保证消息的可靠新!高可用性!高性能!做它擅长做的事情