基于阿里云kafka的权限认证
本文基于 快速搭建SpringCloudStreamKafka 实现
本文是通过 VPC环境的 SASL 账号授权的方式访问。需要准备授权账号,具体操作请看官网提供的文档。
协议:SASL_PLAINTEXT
SASL接入点:SCRAM-SHA-256
SCRAM-SHA-256 一种在服务端和客户端采用哈希算法对用户名与密码进行身份校验的安全认证机制。消息队列Kafka版使用SCRAM-SHA-256加密算法实现身份校验,比PLAIN机制安全性更高,同样支持不重启实例的情况下动态增加SASL用户。
使用 SCRAM-SHA-256 相对来说比较简单,只需要在配置文件加入一些相关配置即可。具体权限请在阿里云的控制台配置!
先在pom文件导入aliyun sdk坐标
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-sts</artifactId>
<version>3.0.0</version>
</dependency>
application.yml 新增配置
# spring cloud stream kafka config
spring:
cloud:
stream:
kafka:
binder:
# Kafka的消息中间件服务器 地址
brokers: ${kafka.bootstrap-servers}
# 开启自动分区
auto-add-partitions: true
# 关闭自动创建 topic
auto-create-topics: false
# 新增 kafka acl 认证 配置
configuration:
security:
# 设置协议模式
protocol: SASL_PLAINTEXT
sasl:
# 设置sasl接入机制
mechanism: SCRAM-SHA-256
jaas:
# 配置授权的账号密码
config: org.apache.kafka.common.security.scram.ScramLoginModule required username="用户名" password="密码";
streams:
binder:
# 配置 处理 Binder 中的异常
# logAndContinue, 记录 并 继续
# logAndFail, 默认 记录 并 失败
# sendToDlq; 成功 并 加入死信队列
deserializationExceptionHandler: sendToDlq
bindings:
# 这里就是在 IProcessor 定义的 INPUT
input:
consumer:
# 是否开启 dlq 队列
enable-dlq: ${kafka.topic.A-topic.dlq}
# 默认开启 启动自平衡模式 可以轮询消费多台服务
auto-rebalance-enabled: true
# 指定 dlq 队列名称 默认为 error.<destination>.<group>
dlq-name: ${kafka.topic.A-topic.dlq-name}
# 是否开启自动提交 默认开启
auto-commit-offset: false
bindings:
output:
# 指定生产 topic
destination: ${kafka.topic.A-topic}
# 消息转换器 默认 application/json
content-type: text/plain
producer:
partition-key-expression: payload
input:
# 指定消费 topic
destination: ${kafka.topic.A-topic}
# 消息转换器 默认 application/json
content-type: text/plain
# 分组
group: ${kafka.topic.A-topic.group}
# 消费的一些设置参数 如 开启分区、重试次数... 具体看官网提供的文档
consumer:
partitioned: true
配置到这里就可以正常使用了
根据kafka配置给到权限!!!权限要给足,要不然会出现报错 或 启动失败。springCloudStream 默认会自动创建 topic 在真正的生产环境是不允许的 所以配置auto-create-topics: false 关闭!