Kafka Connect: Debezium MySQL Connector 的 Partition 和 Replication 配置

使用 Kafka Connect 的 Debezium MySQL Connector 将 MySQL 数据库中的 CDC 数据写入 Kafka 时,在 Kafka 默认允许自动创建 Topic 的情况下,Kafka Connect 自动创建的 Topic 只有一个 Partition,在实际应用中,这显然是不行,我们需要显式地配置 Kafka Connect,指定适当的 Partition 数量,具体怎么做呢?本文简单介绍一下。

首先,在 Kafka Broker 这一侧,一个 Topic 默认创建多少个分区以及一个分区(Topic)有几份副本是有一份全局默认配置的,对应配置项是:

  • num.partitions

  • default.replication.factor

然后,在 Kafka Connect 中也会有相关的默认配置项,但不同之处在于:Kafka Broker 的配置是全局唯一的,所有的 Topic 都应用同一份全局配置,但是 Kafka Connect 的配置却可以分组(Group),每一组可以划定的特定的 Topic,然后针对分组(Group)来配置分区数和副本数!所以在 Kafka Connect 中配置分区数和副本数更灵活一些,是推荐的做法。

下面是关于 Kafka Connect 分组(Group)的详细介绍。假设我们有三个 Topic:topic-1topic-2topic-3,如果我们希望:

  • Case 1: 三个 Topic 都有三个分区和三个副本,则配置如下:
topic.creation.default.replication.factor=3
topic.creation.default.partitions=5

解释一下关键字 default ,Kafka Connect 有这样一个约定,默认情况下,如果没事特别配置,所有的Topic都隶属于一个叫 default 的分组,针对该该分组的配置自然会作用到所有的 Topic 上,这就是为什么我们会配置 default 这个 Group 的分区数和副本数,它会自然作用到所有 Topic 上。用 Kafka Connect 官方文档的解释就是:A default group always exists and matches all topics, … A default group is always defined for topic configurations

  • Case 2: topic1 只有一个分区和一份副本,topic2topic3 各有两个分区和两个副本,其余 Topic 统一三个分区,三份副本,则配置如下:
...
topic.creation.groups=group1, group2
topic.creation.default.replication.factor=3
topic.creation.default.partitions=3

topic.creation.group1.include=topic1
topic.creation.group1.replication.factor=1
topic.creation.group1.partitions=1

topic.creation.group2.include=topic2,topic3
topic.creation.group2.replication.factor=2
topic.creation.group2.partitions=2
...

在配置 include 划定 Topics 时,除了可以使用逗号分隔多个 Topic,还可以使用通配符,具体可参考此官方文档:https://docs.confluent.io/platform/current/connect/userguide.html#connect-source-auto-topic-creation

参考资料

https://debezium.io/documentation/reference/stable/configuration/topic-auto-create-config.html

你可能感兴趣的:(大数据专题,kafka,connect,debezium,mysql,connector,partition,replication)