kafka mirrormaker 2自定义分区

kafka mirrormaker 2 custom partitioner

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

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

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

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

正如您所注意到的,MirrorMaker 2 没有生产者写入镜像记录。

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

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