我正在尝试确定是否可以将自定义分区器与mirrormaker 2一起使用,以便在复制到目标集群时使用自定义分区器。根据这里的文件https://github.com/apache/kafka/tree/trunk/connect/mirror 应该可以使用配置格式target alias.producer.*覆盖mm2 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
我可以在mirrormaker2日志中看到,分区器已成功加载,并且在转储producer配置的地方,似乎设置了自定义分区器类。但是,根据我的分区器类(和观察)中的调试日志,它仅在mirrormarker 2生成内部主题(如mm2-offsets.source.internal)时被调用,而不是生成要复制到的实际主题时被调用。
有人能帮我理解上述行为吗?我假设有独立的生产者客户机,一些负责编写复制的消息,一些负责更新内部主题,但如果是这样,不知道为什么自定义分区器只适用于后者。
1条答案
按热度按时间wydwbb8l1#
mirrormaker 2是一个源连接器。它从外部系统(在本例中是另一个kafka集群)获取记录,并将其提供给kafka connect运行时,该运行时将这些记录生成到目标集群。
因此,正如您所注意到的,mirrormaker 2没有编写镜像记录的生产者。
mirrormaker 2确保镜像记录在目标主题上与在源主题上保持相同的分区。为此,它在目标集群中创建与源主题具有相同分区数的主题。这是设计上的,因为它是镜像工具的主要用例。
你的用例是什么还不清楚。您可以使用自定义的单个消息转换来更改记录的分区。否则,镜像后,使用kafka流重新划分主题。