全局顺序
就目前的应用范围来讲,可以列举出来的也就限于binlog
日志传输,如mysql binlog
日志传输要求全局的顺序,不能有任何的乱序。
方法1
全局使用一个生产者
全局使用一个消费者(并严格到一个消费线程)
全局使用一个分区(当然不同的表可以使用不同的分区或者topic实现隔离与扩展)
这种方法效率较低
方法二
比如
在1个topic
中,有3个partition
,那么如何保证数据的消费?
- 比如可以以
订单ID
作为key,然后取Hash,那么订单ID相同的一定会分到同一分区. - 同一分区的数据如果只有一个消费者单线程消费,那么一定也是有序的.
- 同一分区的数据如果有多个线程消费. 就需要写N个queue,将具有相同key的数据都存储在同一个queue,然后对于N个线程,每个线程分别消费一个queue即可。
总结
- 首先要看业务有没有
顺序消费
的需求 - 其次要考虑
顺序要求
与效率要求
之间的平衡