Kafka中的CreateTopicPolicy在创建主题时未调用validate()

时间:2019-07-03 09:04:40

标签: apache-kafka

我正在尝试为Kafka主题创建自定义主题策略。我发现启动代理时会调用构造函数和configure()方法。 但是,只要通过 kafka-topics.sh 工具创建了新主题,就不会调用validate()方法。

import org.apache.kafka.common.errors.*;
import org.apache.kafka.server.policy.*;
import java.util.*;
public class policy implements  CreateTopicPolicy
{
        public policy()
        {
        System.out.println("came to policy constructor");
        }
        public void configure(Map<String,?> map){

        System.out.println("came to configure in policy");

        }
        public void close(){
        System.out.println("closing");
        }
        public void validate(RequestMetadata requestMetadata) throws PolicyViolationException
        {
System.out.println("Came to validate in policy");
                throw new PolicyViolationException("policy violated");
        }
}

是否有其他配置需要设置?

create.topic.policy.class.name

在代理日志中,我可以看到消息。

came to policy constructor

came to configure in policy

在创建新主题时不是Came to validate in policy

更新:以下答案适用于kafka-topics.sh工具,但不适用于自动创建的主题。

有没有一种方法可以对自动创建的主题进行验证? (不过,我目前已将自动创建主题设置为false)

1 个答案:

答案 0 :(得分:1)

我想您正在使用带有kafka-topics.sh标志的--zookeeper工具。在这种情况下,不会调用主题策略。

仅当通过Admin API创建(或更改)主题时,才会调用主题政策。

自Kafka 2.2.0起,可以将kafka-topics.sh--bootstrap-server标志一起使用来调用Admin API,而不是直接使用Zookeeper。