在spring-mvc中创建过程中如何配置kafka主题保留策略?

时间:2019-06-11 08:19:21

标签: spring-mvc apache-kafka

我需要在创建过程中配置特定主题的保留策略。我试图寻找解决方案,我只能找到如下所示的命令级别alter命令

  

./ bin / kafka-topics.sh --zookeeper本地主机:2181-更改--topic my-topic --configtention.ms = 1680000

有人能让我知道在创建过程中对其进行配置的方法,例如spring-mvc中的xml或属性文件配置。

3 个答案:

答案 0 :(得分:1)

我想您可以为此使用管理客户端(https://kafka.apache.org/22/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html)。您可以在应用程序中创建Admin客户端实例,并使用create或alter topic命令来操纵主题配置,包括保留。

答案 1 :(得分:1)

Spring Kafka允许您通过在应用程序上下文中声明@Bean来创建新主题。这将需要在应用程序上下文中使用KafkaAdmin类型的Bean,如果使用Spring Boot,它将自动创建。您可以如下定义主题:

@Bean
public NewTopic myTopic() {
    return TopicBuilder.name("my-topic")
            .partitions(4)
            .replicas(3)
            .config(TopicConfig.RETENTION_MS_CONFIG, "1680000")
            .build();
}

如果您不使用Spring Boot,则还必须定义KafkaAdmin bean:

@Bean
public KafkaAdmin admin() {
    Map<String, Object> configs = new HashMap<>();
    configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
    return new KafkaAdmin(configs);
}

如果要编辑现有主题的配置,则必须使用AdminClient,这是在主题级别更改retention.ms的代码段:

Map<String, Object> config = new HashMap<>();                
config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");

AdminClient client = AdminClient.create(config);

ConfigResource resource = new ConfigResource(ConfigResource.Type.TOPIC, "new-topic");

// Update the retention.ms value
ConfigEntry retentionEntry = new ConfigEntry(TopicConfig.RETENTION_MS_CONFIG, "1680000");
Map<ConfigResource, Config> updateConfig = new HashMap<ConfigResource, Config>();
updateConfig.put(resource, new Config(Collections.singleton(retentionEntry)));

AlterConfigsResult alterConfigsResult = client.alterConfigs(updateConfig);
alterConfigsResult.all();

答案 2 :(得分:0)

要使用AdminClient以编程的方式在指定的保留时间上创建主题,请执行以下操作:

NewTopic topic = new NewTopic(topicName, numPartitions, replicationFactor);
topic.configs(Map.of(TopicConfig.RETENTION_MS_CONFIG, retentionMs.toString()));
adminClient.createTopics(List.of(topic));