SpringBoot快速集成Kafka

SpringBoot快速集成Kafka

由于需要对接kafka进行数据同步,在对接Kafka时由于内外网的原因没办法直接消费数据,故参考内网环境搭建一个Kafka来测试是否网络已通

一、概述

Kafka部署依赖于zookeeper,所以部署方式采用docker compose部署

环境对安全要求较高,需要添加安全验证,使用SASL/PLAIN验证方式

为了方便于大家测试,代码已提交到Gitee中,欢迎Star⭐️一下~

二、集成SpringBoot

自定义topic

配置文件中添加topic、groupId的配置,便于修改

project:
  kafka:
    topicIds: somliy-test
    groupId: group-id-1

通过读取配置文件的方式,把配置信息加载到Spring中

package top.somliy.kafka.config;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import top.somliy.kafka.properties.KafkaProperties;

/**
 * 类名: @ClassName KafkaTopicConfig
 * 创建人:@author zhao dong
 * 类描述:@Description:
 * 创建时间: 2023/3/20 16:45
 */
@Slf4j
@Configuration
public class KafkaConfig implements InitializingBean {

    @Autowired
    private KafkaProperties kafkaProperties;

    @Override
    public void afterPropertiesSet() {
        // 获取配置
        String topicIds = kafkaProperties.getTopicIds();
        String groupId = kafkaProperties.getGroupId();
        log.info("KafkaConfig 读取配置,topicIds:" + topicIds);
        log.info("KafkaConfig 读取配置,groupId:" + groupId);
        // 系统写入
        System.setProperty("topicIds", topicIds);
        System.setProperty("groupId", groupId);
    }
}

在读入到系统中后,监听注解就可以写成如下格式

 /**
     * kafka监听消息
     *
     * @param kafkaMessage 消息
     */
    @KafkaListener(topics = "#{'${topicIds}'.split(',')}", groupId = "${groupId}")
    public void onMessage(KafkaMessage kafkaMessage) {
        log.info("[线程编号:{} 消息内容:{}]", Thread.currentThread().getId(), kafkaMessage);
    }

三、使用Offset Explorer连接Kafka

property填写

在这里插入图片描述

Security填写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLXVVvY2-1679414505129)(/Users/somliy/Documents/blog/somliy-blog/Kafka-demo/Kafka.assets/image-20230321232653436.png)]

Advanced填写

在这里插入图片描述

JAAS Config填写

分别为用户名,密码(与docker compose中保持一致)

org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";

在这里插入图片描述

四、集成时遇到的问题

序列化方式

在配置中,需要正确配置生产者和消费者的序列化方式,否则启动会报错。

spring:
  kafka:
		***
    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
      ***
    producer:
    	key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
      ***
    
因为需要添加安全验证,生产消费双防都需要添加身份校验数据
spring:
  kafka:
  	***
    consumer:
      properties:
        spring:
          json:
            trusted:
              # 配置 信任, 不认会抛异常 is not in the trusted packages
              packages: top.somliy.kafka.message
        session.timeout.ms: 15000
        security.protocol: SASL_PLAINTEXT
        sasl.mechanism: PLAIN
        sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule
          required username="admin" password="admin-secret";
添加信任类
spring:
  kafka:
    consumer:
      ***
      properties:
        spring:
          json:
            trusted:
              # 配置 信任, 不认会抛异常 is not in the trusted packages
              packages: top.somliy.kafka.message

五、使用方法

启动SpringBoot

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ncGBiR1I-1679414505130)(/Users/somliy/Documents/blog/somliy-blog/Kafka-demo/Kafka.assets/image-20230321233039383.png)]

运行test中的发送消息方法
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值