Spring整合Kafka(一)----快速指南

SpringBoot与ApacheKafka集成教程:生产者与消费者示例


本系列文章基于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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值