Patrik Márton created KAFKA-17200:
-------------------------------------

             Summary: Enable MM2 to replicate topics ending in "internal" suffix
                 Key: KAFKA-17200
                 URL: https://issues.apache.org/jira/browse/KAFKA-17200
             Project: Kafka
          Issue Type: Improvement
          Components: mirrormaker
            Reporter: Patrik Márton
            Assignee: Patrik Márton


In the current Mirror Maker 2 implementation, topics ending in ".internal" or 
"-internal" cannot be replicated as they are considered connect/mm2 internal 
topics. 

In some cases, users have business topics ending in ".internal" or "-internal" 
that are excluded from the replication for the same reason. This is because of 
two things:

(1) The ReplicationPolicy interface excludes all topics ending in ".internal" 
or "-internal" from the replication, as they are considered internal connect 
topics:
{code:java}
/** Internal topics are never replicated. */
default boolean isInternalTopic(String topic) {
    boolean isKafkaInternalTopic = topic.startsWith("__") || 
topic.startsWith(".");
    boolean isDefaultConnectTopic =  topic.endsWith("-internal") ||  
topic.endsWith(".internal");
    return isMM2InternalTopic(topic) || isKafkaInternalTopic || 
isDefaultConnectTopic;
} {code}
(2) The DefaultTopicFilter has the following default exclude regular expression:
{code:java}
".*[\\-\\.]internal, .*\\.replica, __.*" {code}
The goal of this ticket is to enable the replication of such business topics, 
while making sure that kafka internal topics are not replicated.

*Solution 1:* The DefaultTopicFilter can be configured to have a different 
exclude list with more specific regex to exclude all kafka internal topics, but 
include business internal topics, eg.:
{code:java}
"mm2.*[\\-\\.]internal, .*\\.replica, __.*"; {code}
As these topics are explicitly excluded in the ReplicationPolicy interface too, 
we can have a new replication policy from DefaultReplicationPolicy, that 
preserves the same behavior, but overrides the isInternalTopic() method in a 
way that topics ending with the internal suffix are not considered internal 
topics. Obviously in this case it would be important to set up the topic filter 
correctly to avoid replicating kafka internal topics.

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to