【问题标题】:Java set Kafka retention time in source codeJava在源码中设置Kafka保留时间
【发布时间】:2019-10-14 17:32:05
【问题描述】:

我有以下问题。我需要为某些选定主题在 Kafka 中设置保留时间。我找到了一个解决方案,可以使用以下命令进行设置:

kafka-topics --zookeeper localhost:2181 --alter --topic topic-name --config retention.ms=-1

我检查了 Kafka 的 Web UI 并确认它已更改。

如果可能,我想自己在 Java 中设置保留时间,但我似乎找不到合适的类/配置来设置时间。我以为我可以在 ProducerConfig 类中获取有关保留的信息,但我在那里找不到。

是否可以在 Java 中设置保留时间,如果可以,我该如何完成?

提前致谢!

【问题讨论】:

    标签: java apache-kafka spring-kafka


    【解决方案1】:

    这对我有用:)

        private void setRetentionTime(String topicName, int retentionTime) {
            ConfigResource resource = new ConfigResource(Type.TOPIC, topicName);
    
            Collection<ConfigEntry> entries = new ArrayList<>();
            entries.add(new ConfigEntry(TopicConfig.RETENTION_MS_CONFIG, String.valueOf(retentionTime)));
    
            Config config = new Config(entries);
            Map<ConfigResource, Config> configs = new HashMap<>();
            configs.put(resource, config);
    
            AdminClient client = kafkaConfig.createAdminClient();
            client.alterConfigs(configs);
        }
    

    【讨论】:

    • kafkaConfig 变量未声明
    【解决方案2】:

    我以前从 Java 知道您可以作为客户端登录。无法更改主题配置。

    最近他们推出了新版本的 Kafka,我认为可以做到这一点。

    https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/admin/KafkaAdminClient.html#alterConfigs-java.util.Map-org.apache.kafka.clients.admin.AlterConfigsOptions-

    我现在的答案听起来有点模糊,但如果你想要完整的答案,你必须更具体。如果您有确切版本的 Kafka、用于连接到 kafka 的库等,我可以扩展答案...

    我认为从您的应用程序更改服务器端配置不是最好的主意。这是更多的基础设施,不应在运行应用程序时在运行时完成。

    【讨论】:

    • 我看看能不能解决我的问题。我们需要在运行时动态创建主题。某些主题必须具有无限的保留时间。这些主题是用 Java 创建的。它不一定要由 Java 完成。但它必须在创建主题时自动发生。
    • 如果你有 zookeeper,你可能想检查通过 zookeeper 的可能性。正如我所说,我不知道你的环境。看看这个,它涵盖了你的主题:stackoverflow.com/questions/27036923/…
    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多