使用 Spring Boot 时如何禁用 KafkaAdmin

Roe*_*iss 2 spring-kafka

目前我正在使用 Spring boot 2.4.0 和 spring-kafka。

我想使用消费者和生产者,但不想使用 kafka admin。

我尝试KafkaAdmin通过将“bootstrap.servers”设置为 null 来覆盖类,但不起作用。它仍然“尝试”连接以进行 KafkaAdmin 并记录错误。这不是致命的,但是有什么方法可以完全禁用kafka admin吗?

Art*_*lan 6

你的担心没有道理。本身KafkaAdmin不连接。那里的逻辑是这样的:

public final boolean initialize() {
        Collection<NewTopic> newTopics = this.applicationContext.getBeansOfType(NewTopic.class, false, false).values();
        if (newTopics.size() > 0) {
            AdminClient adminClient = null;
            try {
                Map<String, Object> configs2 = new HashMap<>(this.configs);
                checkBootstrap(configs2);
                adminClient = AdminClient.create(configs2);
            }
            catch (Exception e) {
                if (!this.initializingContext || this.fatalIfBrokerNotAvailable) {
                    throw new IllegalStateException("Could not create admin", e);
                }
                else {
                    LOGGER.error(e, "Could not create admin");
                }
            }
Run Code Online (Sandbox Code Playgroud)

NewTopic因此,如果应用程序上下文中没有任何bean,则KafkaAdmin不会执行任何操作。如果您有一些,那么如果不在生产/消费之前在代理上创建新主题,那么原因是什么。因此KafkaAdmin逻辑。