MirrorMaker2-使用独立连接器自定义主题重命名

时间:2020-05-15 06:54:59

标签: apache-kafka apache-kafka-mirrormaker

我想将MirrorMaker作为独立连接器运行。 到目前为止,我还没有找到有关该配置的任何文档。 据我所料,以下内容将复制myTopic

现在在目标群集中,我需要使该主题具有另一个名称foo(而不是自动重命名)。 MirrorSourceConnector是否直接支持此操作?或者我是否需要其他方法?

connector.class = org.apache.kafka.connect.mirror.MirrorSourceConnector
tasksMax = 2
topics = myTopic
source.cluster.bootstrap.servers = sourceHost:9092
target.cluster.bootstrap.servers = sinkHost:9092

1 个答案:

答案 0 :(得分:1)

因此Kafka Mirror Maker源代码具有不错的readme.md

如何配置它取决于直接运行MM2还是在Kafka Connect中运行。您直接说了,位于链接的readme.md中。

基本上:

默认情况下,复制的主题根据“源集群”进行重命名 别名”:

topic-1-> source.topic-1

这可以通过覆盖Replication.policy.separator进行自定义 属性(默认为句点)。如果您需要更多控制方式 定义了远程主题,您可以实现自定义 ReplicationPolicy并覆盖Replication.policy.class(默认为 DefaultReplicationPolicy)。

不幸的是,这意味着您不能仅通过配置代码来重命名主题。 (DefaultReplicationPolicy类仅允许您指定分隔符,而不能指定其他任何内容)。这可能是因为当您指定要镜像的主题时,您使用的是正则表达式,而不是单个主题名称(即使您的源集群主题config属性只是该主题的名称-它仍被视为正则表达式)。 / p>

因此,回到文档:ReplicationPolicy是Kafka connect源代码中的Java接口,因此您需要实现一个实现ReplicationPolicy的自定义Java类,然后确保它位于运行MM2时的类路径。

让我们假设您确实编写了这样的类,并将其称为com.moffatt.kafka.connect.mirror.FooReplicationPolicy。对于您的类而言,一个很好的模板是Kafka Connect随附的默认(显然)复制策略类:DefaultReplicationPolicy。您会看到自己构建自己并不困难。您可以轻松地添加一个地图(无论是硬编码的还是配置的),以查找特定的已配置主题名称并将其映射到目标主题名称。

通过在配置中将新类指定为以下内容来使用新类: replication.policy.class = com.moffatt.kafka.connect.mirror.FooReplicationPolicy