常见面试问题
- 如何处理消息顺序性问题?
问题产生原因
在某些业务场景下,你可以需要保证消息的顺序性执行,例如大数据团队常见的数据库同步的业务场景,如果你没有保证消息顺序执行,那就会出现问题,例如:一个queue,多个consumer;再例如一个topic、一个partition、一个consumer、程序内部多个线程等等都会造成错乱。
如何解决
针对一个queue,多个consumer导致消费错乱,我们通过某种算法(例如hash算法),让这些需要保持先后顺序的消息放到同一个消息队列中,当然前提是这些消息是按时间顺序写入入列的,那在同一个队列中消费自然也是顺序执行的。
针对一个partition,一个consumer,内部多线程消费导致错乱,我们可以让内部单线程消费,写n个内存队列,然后n个线程分别消费一个内存队列即可。