举个栗子,一个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。

如何保证消息的顺序性?

相关文章: