首页 > 解决方案 > kafka mirrormaker 2 自定义分区器

问题描述

我正在尝试确定是否可以将自定义分区器与 mirrormaker 2 一起使用,因此在复制到目标集群时使用了我的自定义分区器。根据这里的文档https://github.com/apache/kafka/tree/trunk/connect/mirror应该可以使用配置格式 target-alias.producer.* 覆盖 mm2 生产者设置,我已经尝试了各种格式,例如(源和目标是我的集群别名)

target.partitioner.class=com.my.custom.Partitioner
target.producer.partitioner.class=com.my.custom.Partitioner
target.cluster.producer.partitioner.class=com.my.custom.Partitioner
source->target.partitioner.class=com.my.custom.Partitioner
source->target.producer.partitioner.class=com.my.custom.Partitioner

我可以在 mirrormaker 2 日志中看到分区器已成功加载,并且在生产者配置被转储的地方,似乎设置了自定义分区器类。但是,根据我的分区程序类(和观察)中的调试日志,它仅在 mirrormarker 2 生成到内部主题(如 mm2-offsets.source.internal)时被调用,而不是在生成到被复制到的实际主题时被调用。

谁能帮我理解上面的行为?我假设有单独的生产者客户端,一些负责编写复制的消息,一些负责更新内部主题,但如果是这样,不确定为什么自定义分区器只适用于后者。

标签: apache-kafkaapache-kafka-mirrormaker

解决方案


MirrorMaker 2 是一个源连接器。它从外部系统(在本例中为另一个 Kafka 集群)获取记录,并将它们提供给 Kafka Connect 运行时,后者将它们生成到目标集群。

所以你注意到 MirrorMaker 2 没有生产者写镜像记录。

MirrorMaker 2 确保镜像记录在目标主题上与源主题上保持相同的分区。为此,它会在目标集群中创建与源主题具有相同分区数的主题。这是设计使然,因为它是镜像工具的主要用例。

目前尚不清楚您的用例是什么。您可以使用自定义Single Message Transformation更改记录的分区。否则,一旦镜像,使用 Kafka Streams 重新分区您的主题。


推荐阅读