我正在尝试为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)
答案 0 :(得分:1)
我想您正在使用带有kafka-topics.sh
标志的--zookeeper
工具。在这种情况下,不会调用主题策略。
仅当通过Admin API创建(或更改)主题时,才会调用主题政策。
自Kafka 2.2.0起,可以将kafka-topics.sh
与--bootstrap-server
标志一起使用来调用Admin API,而不是直接使用Zookeeper。