spring-kafka在分布式环境下的分区和复制如何配置?

How to configure spring-kafka's partition and replication in distributed environment?

我想在具有三个节点的分布式环境中配置一个主题的 3 个分区和 3 个副本。如何在没有 shell 命令的情况下通过 java api 配置这些?

如果我有三个节点:node1、node2 和node3。我要partition1和replication3部署在node1,partition2和replication1部署在node2,partition3和replication2部署在node3。

我在单机环境下试过spring-kafka的api,这个可以自动创建一个主题和1个分区。但它不适用于分布式环境。

我的maven配置是:

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>1.1.7.RELEASE</version>
</dependency>

1.1.x不再支持;你应该至少使用 1.3.9.

1.3.x自带KafkaAdmin,可以自动配置应用上下文中任意NewTopic个bean。

Configuring Topics

If you define a KafkaAdmin bean in your application context, it can automatically add topics to the broker. Simply add a NewTopic @Bean for each topic to the application context.

@Bean
public KafkaAdmin admin() {
    Map<String, Object> configs = new HashMap<>();
    configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,
            StringUtils.arrayToCommaDelimitedString(kafkaEmbedded().getBrokerAddresses()));
    return new KafkaAdmin(configs);
}

@Bean
public NewTopic topic1() {
    return new NewTopic("foo", 10, (short) 2);
}

@Bean
public NewTopic topic2() {
    return new NewTopic("bar", 10, (short) 2);
}