举个栗子,一个mysql binlog同步的系统,压力还是非常大的,日同步数据要达到上亿。mysql→mysql,常见的一点在于数大数据team,就需要同步一个mysql库过来,对公司的业务系统的数据做各种复杂的操作。
我们在mysql里增删改一条数据,对应出来增删改3条binlog,接着这三条binlog发送到MQ里面,到消费出来一次执行起码的能保证是按照这个顺序执行的,不然机会错误。
rabbitmq:一个queue,多个consumer。
可能出现的位置错乱:
kafka:一个topic,一个partition,一个consumer,内部多线程。
可能出现的数据错乱:
下面我们通过以下这些方式保证消息的顺序:
(1)rabbitmq:拆分多个queue,每个queue一个consumer。或者就一个queue但是对应一个consumer,然后这个consumer内部用内存队列做排队,然后分发给底部不同worker处理
(2)kafka:一个topic,一个partition,一个consumer,内部单线程消费,写N个内存queue,然后N个线程分别消费一个内存queue。