David Bros created KAFKA-13796:
----------------------------------

             Summary: MM2 - Topics Exclude/Blacklist not working
                 Key: KAFKA-13796
                 URL: https://issues.apache.org/jira/browse/KAFKA-13796
             Project: Kafka
          Issue Type: Bug
          Components: mirrormaker
    Affects Versions: 3.0.0
            Reporter: David Bros
             Fix For: 3.0.0


Hi all,

We are testing Kafka 3.0.0 in a development environment with Java 17 in a 
Centos 7 machine.

When setting up MM2 replication between two clusters we exclude some topics we 
don't want MM2 to replicate via topics.exclude (we have also tried 
topics.blacklist)

Even though the configuration is parsed correctly, we still get those topics 
replicated among clusters.

Here is our config for the us_central cluster:

```

    # Clusters and bootstrap servers
    clusters=eu_west, us_central
    eu_west.bootstrap.servers=XXnet:9092,XX:9092
    us_central.bootstrap.servers=XX:9092

    us_central.consumer.auto.offset.reset=latest
    us_central.consumer.fetch.max.bytes=31457280
    us_central.consumer.fetch.max.wait.ms=10000
    us_central.consumer.max.poll.records=3000
    us_central.consumer.request.timeout.ms=60000

    eu_west.consumer.auto.offset.reset=latest
    eu_west.consumer.fetch.max.bytes=52428800
    eu_west.consumer.fetch.max.wait.ms=10000
    eu_west.consumer.max.poll.records=3000
    eu_west.consumer.request.timeout.ms=60000

    # Custom producer settings
    us_central.producer.max.request.size=27262976
    us_central.producer.batch.size=22000 
    us_central.producer.compression.type=none
    us_central.producer.send.buffer.bytes=26214400
    us_central.producer.receive.buffer.bytes=26214400

    eu_west.producer.max.request.size=27262976
    eu_west.producer.batch.size=22000
    eu_west.producer.compression.type=none
    eu_west.producer.send.buffer.bytes=26214400
    eu_west.producer.receive.buffer.bytes=26214400

    # Topics configuration
    topics=.*
    topics.blacklist="mm2_test_0"

    # Tasks (threads)
    tasks.max=10 

    # Groups
    groups=phx_netflow

    # Replication factors, these are 1 for lab
    replication.factor=1
    config.storage.replication.factor=1
    offset.storage.replication.factor=1
    status.storage.replication.factor=1
    checkpoints.topic.replication.factor=1
    offset-syncs.topic.replication.factor=1
    sync.group.offsets.replication.factor=1

    ## Config
    config.properties.exclude=local.retention.ms

    # Refresh rates
    us_central.refresh.topics.interval.seconds=15
    us_central.refresh.groups.interval.seconds=15

    eu_west.refresh.topics.interval.seconds=15
    eu_west.refresh.groups.interval.seconds=15 

    ## Sync options
    sync.topic.acls.enabled=true
    offset-syncs.topic.replication.enabled=true
    sync.group.offsets.enabled=true

    # EU pulls us, syd, nyc
    us_central->eu_west.enabled=true
    us_central->eu_west.sync.group.offsets.enabled=false

    # US pulls eu, syd, nyc
    eu_west->us_central.enabled=true
    eu_west->us_central.sync.group.offsets.enabled=true

```

Here is the configuration for eu_west cluster:

```

    # Clusters and bootstrap servers
    clusters=eu_west, us_central
    eu_west.bootstrap.servers=XX,XX:9092
    us_central.bootstrap.servers=XX:9092

    us_central.consumer.auto.offset.reset=latest 
    us_central.consumer.fetch.max.bytes=31457280
    us_central.consumer.fetch.max.wait.ms=10000
    us_central.consumer.max.poll.records=3000
    us_central.consumer.request.timeout.ms=60000

    eu_west.consumer.auto.offset.reset=latest
    eu_west.consumer.fetch.max.bytes=52428800
    eu_west.consumer.fetch.max.wait.ms=10000
    eu_west.consumer.max.poll.records=3000
    eu_west.consumer.request.timeout.ms=60000

    # Custom producer settings
    us_central.producer.max.request.size=27262976
    us_central.producer.batch.size=22000
    us_central.producer.compression.type=none
    us_central.producer.send.buffer.bytes=26214400
    us_central.producer.receive.buffer.bytes=26214400

    eu_west.producer.max.request.size=27262976
    eu_west.producer.batch.size=22000
    eu_west.producer.compression.type=none
    eu_west.producer.send.buffer.bytes=26214400
    eu_west.producer.receive.buffer.bytes=26214400

    # Topics configuration
    topics=.*
    topics.blacklist="mm2_test_0"

    # Tasks (threads)
    tasks.max=10

    # Groups
    groups=ams_netflow 

    # Replication factors, these are 1 for lab
    replication.factor=1
    config.storage.replication.factor=1
    offset.storage.replication.factor=1
    status.storage.replication.factor=1 
    checkpoints.topic.replication.factor=1
    offset-syncs.topic.replication.factor=1
    sync.group.offsets.replication.factor=1 

    ## Config
   config.properties.exclude=local.retention.ms

    # Refresh rates
    us_central.refresh.topics.interval.seconds=15
    us_central.refresh.groups.interval.seconds=15 

    eu_west.refresh.topics.interval.seconds=15
    eu_west.refresh.groups.interval.seconds=15

    ## Sync options
    sync.topic.acls.enabled=true
    offset-syncs.topic.replication.enabled=true
    sync.group.offsets.enabled=true

    # EU pulls us, syd, nyc
    us_central->eu_west.enabled=true
    us_central->eu_west.sync.group.offsets.enabled=true

    # US pulls eu, syd, nyc
    eu_west->us_central.enabled=true
    eu_west->us_central.sync.group.offsets.enabled=false

```

When starting MM2 freshly installed (deleted all mm2 related topics), we still 
get the excluded topics replicated between clusters.

 It's also worth mentioning that the connector seems to be reading the 
configuration correctly however it is (probably) at a later stage where the 
topics get filtered incorrectly.

I attach a log from our connect.log where the exclude field is correctly parsed 
from our connect-mirrormaker.properties.

```

    groups.exclude = [console-consumer-.*, connect-.*, __.*]
    topics.exclude = [mm2_test_0]
    exclude.internal.topics = true

```

After much testing and over 20 combinations of regex we have not found a way to 
exclude the topics via the configuration properties specified in the 
documentation for MM2.

The *whitelist* does work though, so we are a bit confused in why the blacklist 
does not.

We request help to further test this, we are not sure if we are doing something 
wrong.

 

Thanks



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to