springboot一般创建topic方式, 多个的话会很冗余
@Bean
public NewTopic myTopic() {
return new NewTopic(myTopic, 2, (short) 1);
}
缺点: Topic 信息不清晰; 代码量庞大
优化处理
- 配置
application.xml
配置文件中配置 Kafka 连接信息以及我们项目中用到的 topic
server:
port: 9090
spring:
kafka:
bootstrap-servers: localhost:9092
kafka:
topics:
- name: topic1
num-partitions: 3
replication-factor: 1
- name: topic2
num-partitions: 1
replication-factor: 1
- name: topic3
num-partitions: 2
replication-factor: 1
- 文件注入
@Configuration
@ConfigurationProperties(prefix = "kafka")
@Setter
@Getter
@ToString
public class TopicConfigurations {
private List<Topic> topics;
@Setter
@Getter
@ToString
public static class Topic {
String name;
Integer numPartitions = 3;
Short replicationFactor = 1;
NewTopic toNewTopic() {
return new NewTopic(this.name, this.numPartitions, this.replicationFactor);
}
}
}
- 项目启动初始化topic
@Configuration
@EnableConfigurationProperties(TopicConfigurations.class)
public class TopicAdministrator {
private final TopicConfigurations topicConfig;
private final GenericWebApplicationContext context;
public TopicAdministrator(TopicConfigurations topicConfig, GenericWebApplicationContext genericContext) {
this.topicConfig = topicConfig;
this.context = genericContext;
}
/**项目启动时进行初始化**/
@PostConstruct
public void init() {
initializeBeans(topicConfig.getTopics());
}
private void initializeBeans(List<TopicConfigurations.Topic> topics) {
topics.forEach(
t -> context.registerBean(t.name, NewTopic.class, t::toNewTopic)
);
}
}
kafka客户端命令创建topic
./kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 3 --partitions 2
./kafka-topics.sh --bootstrap-servers localhost:2181 --create --topic test --replication-factor 3 --partitions 2
#bootstrap-servers vs zookeeper
bootstrap-servers指的是目标集群的服务器地址
- 关系 kafka系统依赖zookeeper系统的分布式管理,Zookeeper是开源的分布式应用协调系统