我们有一个生产Kafka集群,该集群最近受到一堆新话题的污染。 Kafka群集具有以下设置:
auto.create.topics.enable=false
delete.topic.enable=false
经过调查,我发现这些主题是由使用
KafkaStream
的createTopic方法的客户团队创建的:org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster#createTopic(java.lang.String, int, int)
这是否意味着KafkaStream的主题创建不会通过
auto.create.topics.enable
的服务器端代理设置进行?这是否意味着createTopic*
方法不算作自动主题创建?如果是这样,我们如何才能阻止客户团队以编程方式在Kafka集群上创建主题?编辑:kafka集群正在运行10.1.1,而客户端正在为kafka和Kafka-Stream运行1.0.0
最佳答案
仅当客户端尝试从不存在的主题读取/写入(或查询不存在的主题的元数据)时,配置auto.create.topics.enable
才适用。
Kafka Streams确实使用CreateTopic
请求显式创建主题,因此auto.create.topics.enable
不适用。
您可以为集群设置一些ACL,以控制谁可以创建主题:https://kafka.apache.org/0101/documentation.html#security_authz
注意:如果不允许使用Kafka Streams的团队创建新主题,则会使他们很难使用Kafka Streams。如果没有这些主题,Kafka Streams就无法运行,并且您需要手动创建这些主题(使用正确的配置),以免破坏Kafka Streams应用程序。