作为一名java程序员,求职面试时,关于消息中间件的问题时常会遇到,张工是一名java程序员,最近到某知名互联网公司面试,面试官提出这样的一个问题:
如何保证消息的顺序性?
张工一时间没有回答上来,面试官:你都工作三年了,怎么连保证消息的顺序性都不会啊。被面试官这么一说,张工都不好意思了。
其实面试官问这个问题无非就是考察两点:
比如有这样一个需求,需要对MySql数据库的binlog日志进行采集,就是数据从一个 mysql 库同步到另一个 mysql 库。
要是有这样的一个操作:在 mysql 里对一条数据进行增删改操作,对应就有增删改 3 条 binlog 日志,接着这三条 binlog 发送到消息队列里,再通过Kafka或是RabbitMQ消费出来依次执行,这时就要保证消息的有序性了,要不然本来是增加、修改、删除这样的顺序;结果变成删除、修改、增加,顺序错乱了,本来这个数据同步过来最后应该是被删除了,结果顺序搞错了导致最后这个数据保留下来了,这个数据同步就出问题了。
N 个内存 queue,具有相同 key 的数据都到同一个内存 queue;然后对于 N 个线程,每个线程分别消费一个内存 queue ,这样就能保证顺序性了。
关于消息队列,平时工作中要注意总结和积累,查漏补缺,不断完善自己的知识体系。
由于笔者水平有限,文中纰漏之处在所难免,权当抛砖引玉,不妥之处,请大家批评指正。
作者:洪生鹏 白天搬砖,晚上摆地摊。技术交流、媒体合作、品牌宣传请添加微信: hsp-88ios
联系客服