使用spring-kafka集成kafka的配置

前言:最近公司业务一直在整kafka相关,但是相关知识很久没接触,有点遗忘。看了看网上的,大多都是spring-kafka,但是mentor给的是直接依靠apache-kafka依赖实现,好不容易搞明白,参照文章,但是导师说:会出现丢包问题,后面使用的是spring-kafka,卑微重新修改代码。

添加依赖

1.pom文件

导入maven文件的包

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

2.配置相关

在yaml文件相关中添加项目运行时kafka的相关配置,如 producer生产者的键值对的序列化、运行地址、发送时机;同理customer的相关配置。

spring:
  kafka:
    bootstrap-servers: 172.16.39.227:9092 #指定kafka server的地址,集群配多个,中间,逗号隔开
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      batch-size: 16384 #消息累计到batch-size的值后,才会发送消息
      properties:
        linger:
          ms: 10 #消息未达到batch-size 但达到指定毫秒后发送消息
    consumer:
      group-id: ky-launch-activation-online #默认群组ID
      # 客户端收到消息后,在处理消息前自动提交,这样kafka就认为consumer已经消费过了,偏移量增加
      enable-auto-commit: true
      auto-commit-interval: 500
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

业务处理

1.消费数据

创建consuemr消费组,对kafka组件信息进行消费。

整个文件具体代码如下所示:

@Component
public class JsonMusicSunoConsumer {
    Logger logger = LoggerFactory.getLogger(JsonMusicSunoConsumer.class);

    @Resource
    private MusicLoadCsvService musicLoadCsvService;

    @KafkaListener(topics = {KafkaTopic.MUSIC_SUNO_CONTINUE}, concurrency = "3", groupId = "ky-recommend-backend-new")
    public void sunoCron(ConsumerRecord<?, ?> record) {
        String message = null;
        try {
            message = (String) record.value();
            MusicSunoKafka musicSunoKafka = JSON.parseObject(message, MusicSunoKafka.class);
            if (Objects.isNull(musicSunoKafka)) {
                logger.warn("JsonMusicSunoConsumer#sunoCron, parse json failed, record: {}", message);
                return ;
            }
            musicLoadCsvService.submitForKafkaWork(musicSunoKafka);
        } catch (Exception e) {
            logger.error("JsonMusicSunoConsumer#handler, handler record err, record: {}, errMsg: {}",
                    message, e.getMessage(), e);
        }

    }

}

重点讲解kafka相关的,其余均为具体业务信息。

@KafkaListener(topics = {KafkaTopic.MUSIC_SUNO_CONTINUE}, concurrency = "3", groupId = "ky-recommend-backend-new")
  • @KafkaListener:这是一个元注解,用于标记方法作为 Kafka 消息监听器。
  • topics:指定要监听的 Kafka 主题。在这个例子中,它使用了一个字符串数组,其中包含一个元素 KafkaTopic.MUSIC_SUNO_CONTINUE,即要监听的主题名。
  • concurrency:指定并发处理消息的数量。在这个例子中,它被设置为 “3”,表示同时处理3个消息。
  • groupId:指定消费者组的ID。消费者组是一组共享相同消费逻辑的消费者的集合。在这个例子中,消费者组ID被设置为 “ky-recommend-backend-new”。

2.发送信息

我这里通过的是新建立一个路由函数进行测试。测试的方法有很多种,都可以实施。

这里通过路由进行测试,在任何一个webController中添加你需要的测试的函数,然后发送,下方提供我编写时需要的业务数据。

@Resource
KafkaTemplate<String, Object> kafkaTemplate;

@PostMapping("/test")
@ResponseBody
public Result<Object> ProcessKafka(HttpServletRequest request){
    Environment env = getEnvironment(request);
    String value = "  {\"id\":1,\"prompt\":\"Apeacefulmorninginthecountryside\",\"desc\":\"Inspiredbythetranquilityofrurallife,withchirpingbirdsandrustlingleaves.\",\"diy_lrc\":\"Verse1:\\nWakinguptothegentlebreeze,\\nFieldsofgreenasfarastheeyecansee.\\nChirpingbirdssingtheirsweetmelodies,\\nInthispeacefulmorning,Ifeelfree.\\n\\nChorus:\\nOh,whatabeautifulday,\\nInthecountrysidewhereI'llstay.\\nWitheverybreath,Ifindmyway,\\nToalifeofpeaceandserenity.\\n\\n...\",\"diy_music_name\":\"MorningSerenity\"," +
            "\"assign_uid\":123456,\"source_url\":\"https://example.com/countryside.mp3\",\"status\":0,\"reason\":\"\",\"music_id\":0,\"create_time\":1648486800,\"update_time\":1648519200}";
    kafkaTemplate.send("music_suno_continue",value);
//        MusicSunoKafka musicSunoKafka = JSON.parseObject(value, MusicSunoKafka.class);
//        musicLoadCsvService.submitForKafkaWork(musicSunoKafka);
    logger.info("CsvLoadController#ProcessKafka, process kafka and storage success, request: {}, env: {}", request, env);
    return build(ErrorCode.OK);

然后启动整个项目,在postman中发送请求。


  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值