使用Spring访问 Apache Kafka(一)----快速指南
本系列文章基于spring-kafka 3.1.1版本。
一、导入依赖和编写配置
如果你没有使用spring boot,导入依赖的时候需要加3.1.1,如果项目是基于spring boot的,则不需要3.1.1,spring boot会自动导入兼容的spring-kafka版本。另外,最简单的创建spring-kafka项目的方法是使用https://start.spring.io/来创建,在依赖中添加Spring for Apache Kafka。
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>3.1.1</version>
</dependency>
以下是spring-kafka的application.yml配置:
spring:
kafka:
bootstrap-servers: localhost:9093
consumer:
auto-offset-reset: earliest
logging:
level:
root: info
spring.kafka.bootstrap-servers指明了broker的地址,spring.kafka.consumer.auto-offset-reset: earliest会使新的consumer从最早的消息开始消费。Spring-kafka有一些默认的配置放在了KafkaProperties这个类中,比如bootstrapServers默认值为localhost:9092,keyDeserializer和valueDeserializer默认值为StringDeserializer.class,keySerializer和valueSerializer默认值为StringSerializer.class。
二、创建一个Topic
可以使用NewTopic的bean创建一个或多个topic,如下:
@SpringBootApplication
public class KafkaCreateTopic {
public static void main(String[] args) {
SpringApplication.run(KafkaCreateTopic.class, args);
}
@Bean
public NewTopic topic() {
return TopicBuilder.name("topicx")
.partitions(10)
.replicas(3)
.build();
}
//@Bean
public NewTopic topic1() {
return TopicBuilder.name("thing11")
.partitions(10)
.replicas(3)
.compact()
.build();
}
//@Bean
public NewTopic topic2() {
return TopicBuilder.name("thing22")
.partitions(10)
.replicas(3)
.config(TopicConfig.COMPRESSION_TYPE_CONFIG, "zstd")
.build();
}
//@Bean
public NewTopic topic3() {
return TopicBuilder.name("thing33")
.assignReplicas(0, Arrays.asList(0, 1))
.assignReplicas(1, Arrays.asList(1, 2))
.assignReplicas(2, Arrays.asList(2, 0))
.config(TopicConfig.COMPRESSION_TYPE_CONFIG, "zstd")
.build();
}
//@Bean
public KafkaAdmin.NewTopics topics456() {
return new KafkaAdmin.NewTopics(
TopicBuilder.name("defaultBoth")
.build(),
TopicBuilder.name("defaultPart")
.replicas(1)
.build(),
TopicBuilder.name("defaultRepl")
.partitions(3)
.build());
}
以上任意一个Bean都可以创建topic,只不过有着不同的配置,TopicBuilder.name()指定topic的名字,partitions()指定分区数量,replicas()指定副本数量,compact()指定cleanup.policy为compact,对于compact的详细说明,参见https://blog.youkuaiyun.com/u013200380/article/details/106453013/,config(TopicConfig.COMPRESSION_TYPE_CONFIG, “zstd”)指定消息压缩类型为zstd,assignReplicas() 是将某一分区的副本分配在特定的broker上,最后一个方法topics456() 表示可以使用Spring-kafka一次性创建多个topic。
三、编写一个Producer
以下是一个简单的producer程序:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ApplicationRunner runner(KafkaTemplate<String, String> template) {
return args -> {
template.send("topicx", "test");
};
}
}
四、编写一个Consumer
以下是一个简单的consumer程序:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@KafkaListener(id = "myId", topics = "topicx")
public void listen(String in) {
System.out.println(in);
}
}
SpringBoot与ApacheKafka集成教程:生产者与消费者示例
748

被折叠的 条评论
为什么被折叠?



