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。
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);
}
我想在具有三个节点的分布式环境中配置一个主题的 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。
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);
}