16、Kafka ------ SpringBoot 整合 Kafka (配置 Kafka 属性 及对应的 属性处理类 解析)

目录

配置 Kafka 及对应的 属性处理类

配置Kafka

spring.kafka.* 开头的配置属性,这些属性将由 KafkaProperties类(属性处理类)负责处理。

属性处理类: KafkaProperties

spring.kafka. * 开头的属性,是对 生产者、消费者、管理API、流API 都有效的 通用配置

spring.kafka.producer. * 开头的属性,说明这些配置属性仅对 消息生产者 有效;

spring.kafka.consumer. * 开头的属性,说明这些配置属性仅对 消息消费者 有效;

spring.kafka.admin. * 开头的属性,说明这些配置属性仅对 管理者API 有效;

spring.kafka.streams. * 开头的属性,说明这些配置属性仅对 流API 有效;

spring.kafka.listener. * 开头的属性,说明这些配置属性仅对 Kafka的监听器的容器工厂 有效;

spring.kafka.template. * 开头的属性,说明这些配置属性仅对 KafkaTemplate 有效;

...

其他以此类推

不管是KafkaProperties类,还是Producer、Consumer、Admin、Streams等内部类,它们都定义了一个Map<String, String>类型的properties属性,这个属性用于配置通用属性。

比如可以定义如下配置:

复制代码
 spring.kafka.properties[prop.one]=first 

Kafka配置属性的约定

Spring Boot为Kafka的常用配置属性都提供了对应字段

比如 Kafka 的生产者配置支持 key.serializer 属性,Spring Boot 就在 Producer 内部类中定义了一个 keySerializer 字段来与之对应,

这样就允许 在application.properties 配置文件中定义如下配置:

复制代码
 spring.kafka.producer.key-serializer=...

上面这行配置其实就对应于为 Kafka 生产者配置中的 key.serializer 属性,

只不过是将 Kafka 配置中点号(.)分隔的属性,变成了中划线分隔。

如图:

问题在于 Kafka 支持的配置属性实在太多,而且随着版本的升级,Kafka 完全可能会加入更多的配置属性。为了能支持 Kafka 所有可能的属性,Spring Boot也支持如下配置:

复制代码
 spring.kafka.properties[prop.one]=first  ------ 此处 properties 中属性名、属性值都需要自行控制(参考Kafka文档)

此处的 properties 是一个Map类型,因此它可以接受无数的 key-value对,

其中 key 将作为 Kafka 的配置属性名,value 将作为 Kafka 的配置属性值。

Spring Boot会忠实地将"prop.one"附加属性及对应的值传给Kafka,至于该属性是否起作用则取决于Kafka本身

kafka 提供了一致的模型,无论后面版本是新增额外的配置属性或删减,都可以通过这个 properties 传进来这个KafkaProperties属性处理类。

【备注】:

当你要为消息生产者、消费者、管理API、流API等配置属性时,常用属性可通过 Producer内部类、Consumer内部类、Admin内部类、Streams内部类 的对应属性来进行配置。

还有一些额外的配置属性,都应该通过 .properties 来配置。

代码演示

spring.kafka. * 开头的属性,是对 生产者、消费者、管理API、流API 都有效的 通用配置

生产者相关的配置

如图,我们在配置文件中配置的生产者需要的一些属性,跟我们自己写一个生产者时添加的配置是一样的,只是写法不一样,一个是写在配置文件里面,一个是简单的写在类里面。

配置文件中的属性,如果 springboot 有为它提供对应的字段,那么点击该属性,是可以跳转到对应的字段里面去的。
能点进去,说明这个配置属性是有效的。

消费者相关的配置

可以看出和之前写的消费者的对应属性

代码(配置文件)

application.properties

java 复制代码
# 指定连接 kafka 的 Broker 服务器的地址
spring.kafka.bootstrap-servers=localhost:9092,localhost:9093,localhost:9094
# 发送请求是传递给服务器的ID,用于服务器端做日志
spring.kafka.client-id=ljh-boot

# 生产者相关的配置
spring.kafka.producer.acks=all
spring.kafka.producer.retries=0
# 当 Producer 内部类没有为 linger.ms 配置属性提供对应的字段时,可通过 properties 来设置
# springboot 没有为这个属性添加对应的字段,所以我们需要自己用properties来给其添加进去
spring.kafka.producer.properties[linger.ms]=3

spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer



# 消费者相关的配置

# 自动提交offset,就是类似之前的自动消息确认
spring.kafka.consumer.enable-auto-commit=true

# 多个消息之间,自动提交消息的时间间隔
# 当 Consumer 内部类没有为 auto.commit.interval.ms 这个配置属性提供对应的字段时,可通过 properties 来设置
# springboot 没有为这个属性添加对应的字段,所以我们需要自己用properties来给其添加进去
spring.kafka.consumer.properties[auto.commit.interval.ms]=1000

# 设置session的超时时长,默认是10秒,这里设置15秒
spring.kafka.consumer.properties[session.timeout.ms]=15000

# 设置每次都从最新的消息开始读取
spring.kafka.consumer.auto-offset-reset=latest

# 设置序列化器
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
相关推荐
Foyo Designer42 分钟前
【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的国际化:支持多语言的 RESTful API
java·spring boot·redis·后端·spring·缓存·restful
hweiyu002 小时前
从JVM到分布式锁:高并发架构设计的六把密钥
jvm·redis·分布式·mysql·etcd
昵称为空C2 小时前
SpringBoot编码技巧-ScheduledExecutorService轮询
java·spring boot·后端
用键盘当武器的秋刀鱼2 小时前
springBoot统一响应类型3.5版本
java·spring boot·spring
JaneYork3 小时前
接口设计,接口返回信息,当账号不存在时候,应该返回200还是500,是直接返回R.fail()还是throw exception
java·spring boot
风象南3 小时前
Spring Boot 实现文件断点续传
java·spring boot·后端
Acrel12344 小时前
安科瑞防逆流方案在内蒙古中高绿能能源7MW分布式光伏项目的应用
分布式·能源
塞尔维亚大汉4 小时前
OpenHarmony之分布式软总线json.payload.c(三)
分布式·嵌入式·harmonyos
计算机-秋大田4 小时前
基于Spring Boot的轻型卡车零部件销售平台的设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·课程设计
萱萱1995044 小时前
Spring Boot实战:MySQL与Redis数据一致性深度解析与代码实战
spring boot·redis·mysql