本文以 Kafka 消费 MySQL 数据为例,介绍 Kafka 消费 MySQL Binlog 的工作机制。
MySQL 的 Binlog Event 是 Kafka 的消息内容,且一个 Binlog Event 可能包含多行数据,Kafka 仅将这些 Binlog Event 作为消息进行传输。具体如下所示:
MySQL Binlog Event
Binlog Event:MySQL 用于记录数据库变更(例如 INSERT
、UPDATE
、DELETE
)的结构化日志。一个 Binlog Event 在 MySQL 中可以包含一个或多个行变更。
多行变更:一个 Binlog Event 能够对应一次数据变更操作,且可能包含多行数据。例如一个复杂的UPDATE
操作能够修改多行数据,这些变更会被记录在一个 Binlog Event 里。
Kafka 作为 Binlog Event 的传输介质
消息内容:当把 Binlog Event 传输至 Kafka 时,Kafka 消息的内容即为该 Binlog Event,并非具体的行数据。实际上,每条 Kafka 消息所包含的是一个或多个行变更事件的组合。
消息数量:在 Kafka 中,消息的数量实际上是由 Binlog Event 的数量所决定的,并非是具体的行数。因为一个 Binlog Event 当中可能会包含多行的数据变更,所以 Kafka 中的消息数与行变更数之间不存在直接的线性关系。
因此 Kafka 中的消息反映的是 Binlog Event 的数量而不是具体的行数。