我一直在研究如何实现一个系统来捕获 MySQL 数据库中的变化。我看过的一个例子是 LinkedIn 使用 DataBus ( http://www.slideshare.net/SunilNagaraj1/databus-eventbrite2013 ),以及不同地方的其他人使用 Apache Kafka。
在上述所有项目中,似乎都暗示在从 MySQL binlog 接收数据时,您有多个消费者并行工作。消费者应该在另一个 MySQL 数据库上重放他们收到的所有那些 INSERT/UPDATE/DELETE 命令,该数据库应该是原始源数据库的镜像。
但这是否意味着这些 INSERT/UPDATE/DELETE 命令在目标镜像 MySQL 数据库上执行时可能会被乱序解释?
例如,如果在 binlog 中,您有这两个按所示顺序的语句:
DELETE FROM stats;
INSERT INTO stats VALUES(....);
然后第一个语句到Consumer 1,然后第二个到Consumer 2,但是Consumer 2先执行,然后是Consumer 1,那会不会导致数据丢失?
因此,在使用 Apache Kafka 的情况下,目前似乎唯一的解决方法是拥有一个主题、一个分区和一个消费者(或消费者组)。
我想知道每个人对此有何看法。我知道这是在 MySQL binlog 中使用基于语句的更改。如果我们改用基于行的更改会有所不同吗?
谢谢是