小弟最近想从RabbitMQ升级上kafka,别问为什么,因为老板觉得高大上!
1.了解版本
kafka_2.13-3.4.0版本号说明:
2.13:编译 Kafka 源代码的 Scala 编译器版本
3.4.0:kafka版本号
2.了解权限
常在江湖飘,裸奔肯定会挨刀。所以还是得至少设置个密码。
下面小弟选择SASL/SCRAM进行实战!
3. 设置
穷且志坚的小弟,当然选择免费又难操控的Apache kafka版本啦。
很多人用docker安装,但是小弟觉得它很繁琐,所以直接下安装包简单快捷可控。
链接(Apache Kafka)
解压下的目录:
由于Kafka依赖于zookeeper,所以要先启动它。
1. zookeeper设置SCRAM相关
修改文件:config/zookeeper.properties 添加以下内容:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
新建:zookeeper_jaas.conf
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_admin="password"
user_kafka="password";
};
启动:
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
2. 设置用户 启动zookeeper之后,开始设置用户
新建admin用户和密码
bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=password],SCRAM-SHA-512=[password=password]' --entity-type users --entity-name admin
3. kafka设置SCRAM相关
新建 kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="password"
user_admin="password";
};
Client {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="kafka"
password="password";
};
说明:
KafkaServer字段是用来配置broker间通信使用的用户名和密码以及客户端连接时需要的用户名和密码,其中username和password是broker用于初始化连接到其他的broker,kafka用户为broker间的通讯。在一个Kafka集群中,这个文件的内容要一样,集群中每个Borker去连接其他Broker的时候都使用这个文件中定义的username和password来让对方进行认证
而user_NAME语句,是用来配置客户端连接Broker时使用的用户名和密码,也就是新建用户的用户名都是以user_开头的,等号后面是密码,密码可以是明文且没有复杂度要求。完整语句是user_USERNAME="PASSWORD
Client部分是用来设置与Zookeeper的连接的,它还允许broker设置 SASL ACL 到zookeeper 节点,锁定这些节点,只有broker可以修改它。如果Zookeeper与Broker之间不设置认证,那么就可以不配置。这里要和zookeeper里面的设置的user_kafka="password"一样!
设置 server.properties
zookeeper.connect=10.221.230.69:2181
# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=18000
zookeeper.set.acl=true
listeners=SASL_PLAINTEXT://10.221.230.69:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
advertised.listeners=SASL_PLAINTEXT://10.221.230.69:9092
allow.everyone.if.no.acl.found=true
super.users=User:admin;User:kafka
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
启动:
bin/kafka-server-start.sh -daemon config/server.properties
4. 命令行测试
这里小弟为了方便,直接用admin这个账号测试
- 创建topic
新建config.properties文件(小弟放在config下面),内容如下:
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username='admin' password='password';
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
然后执行:
bin/kafka-topics.sh --create --topic ticpictwo --bootstrap-server 10.221.230.69:9092 --command-config /home/soft/kafka_2.13-3.4.0/config/config.properties
2.查看所有topic
bin/kafka-topics.sh --list --bootstrap-server 10.221.230.69:9092 --command-config /home/soft/kafka_2.13-3.4.0/config/config.properties
3.product发送数据
新建配置文件:kafka_client_scram_producer_jaas_back.conf
内容如下:
KafkaClient {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="password";
};
修改config/producer.properties 增加内容如下:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
3.1 设置变量:
export KAFKA_OPTS="-Djava.security.auth.login.config=/home/soft/kafka_2.13-3.4.0/config/kafka_client_scram_producer_jaas.conf"
3.2 执行命令:
bin/kafka-console-producer.sh --topic ticpictwo --bootstrap-server 10.221.230.69:9092 --producer.config config/producer.properties
4. 集成springboot
4.1 新建product用户
sh kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=test],SCRAM-SHA-512=[password=test]' --entity-type users --entity-name testproa
4.2 赋予testproa写操作
bin/kafka-acls.sh --authorizer kafka.security.authorizer.AclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:testproa --operation Write --topic ticpictwo
4.3 consumer用户与操作权限,这里同product一样,小弟为了方便就直接用同一个用户testproa了
bin/kafka-acls.sh --authorizer kafka.security.authorizer.AclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:testproa --operation Read --topic ticpictwo
4.4 pom配置
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
4.5 application.yml配置
server:
port : 8070
spring:
kafka:
bootstrap-servers: 10.221.230.69:9092
producer:
properties:
security:
protocol: SASL_PLAINTEXT
sasl:
jaas:
config: org.apache.kafka.common.security.scram.ScramLoginModule required username='testproa' password='test';
mechanism: SCRAM-SHA-256
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
properties:
security:
protocol: SASL_PLAINTEXT
sasl:
jaas:
config: org.apache.kafka.common.security.scram.ScramLoginModule required username='testproa' password='test';
mechanism: SCRAM-SHA-256
#group-id: spring-boot
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
5.最后
5.1 安利一个监控工具KnowStreaming
5.2 薅羊毛confluent.cloud/
免费试用一个用,够测试了
5.3 小弟不才,蛇蛇阅读,再见!