SpringBoot快速集成Kafka

SpringBoot快速集成Kafka

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

一、概述

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

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

二、集成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@ConfigurationpublicclassKafkaConfigimplementsInitializingBean {
​
    @Autowired
    private KafkaProperties kafkaProperties;
​
    @Override
    publicvoidafterPropertiesSet() {
        // 获取配置
        StringtopicIds= kafkaProperties.getTopicIds();
        StringgroupId= 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填写
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
          requiredusername="admin"password="admin-secret";复制代码
添加信任类
spring:kafka:
    consumer:
      ***
      properties:
        spring:
          json:
            trusted:
              # 配置 信任, 不认会抛异常 is not in the trusted packages
              packages:top.somliy.kafka.message复制代码

五、使用方法

启动SpringBoot

运行test中的发送消息方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值