文章目录
- 前言
- 一、资源类型
- 二、不同资源所对应的权限
- 1.cluster资源权限
- 2.topic资源权限
- 3.consumer-group资源权限
- 4.transactionalid资源权限
- 5.delegationtoken资源权限
- 三、topic的创建、生产以及消费操作所对应的权限
- 1、创建topic
- 2、生产操作
- 3、消费操作
- 备注
- 总结
前言
本文主要介绍kafka的权限控制相关的资源类型以及针对不同资源的权限。
一、资源类型
kafka的ACL可对如下资源进行控制。
1、cluster资源,对集群的相关操作需要相应的权限,如果授权不通过,会报: CLUSTER_AUTHORIZATION_FAILED错误。
2、topic资源,对topic的操作需要相应的权限,如果授权不通过,会报:TOPIC_AUTHORIZATION_FAILED错误。
3、consumer-group资源,表示消费者组,对消费者组的操作,比如将某消费者加到消费者组需要具有相应的权限,如果授权不通过,会报:GROUP_AUTHORIZATION_FAILED错误。
4、transactionalid资源,kafka的事务ID,表示事务的相关操作,如果授权不通过,会报:TRANSACTIONAL_ID_AUTHORIZATION_FAILED错误。
5、delegationtoken资源,集群的委托令牌。
二、不同资源所对应的权限
1.cluster资源权限
权限名 | 权限解释 |
Configure | 扩容操作 |
Describe | 查询操作:当收到list_groups的请求时,broker会先检查集群级别的权限,如果没有发现集群级别的权限,接着回去检查组级别的权限。该鉴权没通过,不会报CLUSTER_AUTHORIZATION_FAILED错误。 |
Kafka-Admin | kafka管理员 |
Create | 创建操作:在集群中如果配置了自动创建topic,客户端向服务的还未创建的topic发送数据,会判断集群是否有该权限。 |
Idempotent Write | 幂等写入操作:幂等生产操作需要该权限。 |
Describe Configs | 查询配置操作:如果查询broker、broker Logger信息,需要该权限,不涉及查询topic。 |
Alter Configs | 更改配置操作:如果需要更改集群配置,主要指broker、broker Logger的配置,当用户具有配置修改权限时,即使不配置查询权限也可以进行查询。 |
Cluster Action | 集群操作:集群中的follower需要该权限,进行获取分区数据。 |
Alter | 更改操作 |
2.topic资源权限
权限名 | 权限解释 |
Publish | 生产操作:当对topic进行生产操作时,需要该权限。 |
Consume | 消费操作:当对topic进行消费操作时,需要该权限。 |
Configure | 配置操作:当对topic进行topic进行扩容操作时,需要该权限。 |
Describe | 查询操作:当获取topic描述信息时,需要该权限。 |
Create | 新建操作:当新建topic时,需要该权限。 |
Delete | 删除操作:当删除topic,需要该权限。 |
Describe Configs | 查询配置操作:如果请求topic配置的话,broker会检查topic是否有该权限。 |
Alter | 更改操作:如果更改topic的相关操作,需要该权限。 |
3.consumer-group资源权限
权限名 | 权限解释 |
Consume | 消费操作:当对topic开启消费权限时,涉及到offset的管理操作,此时也要开启消费者组的消费权限。 |
Describe | 查询操作:应用程序会先进行组的查询权限认证,之后才会进行topic权限认证。 |
Delete | 删除操作 |
4.transactionalid资源权限
权限名 | 权限解释 |
Publish | 该权限主要是对用户开启事务特性的客户端请求进行鉴权,主要针对事务开启、结束、提交Offset、事务性数据生产等操作。 |
Describe | 主要是对于开启事务特性的客户端与Coordinator的请求进行鉴权。 |
5.delegationtoken资源权限
权限名 | 权限解释 |
Describe | 查询操作:如果需要查询Token资源,需要该权限。当前仅支持查询权限操作。 |
三、topic的创建、生产以及消费操作所对应的权限
1、创建topic
1、创建topic需要用户具有creat和describe
权限,如果需要对已有的topic的相关配置进行查询和修改,需要Alter Configs和Describe Configs权限。如果需要进行扩容操作,需要Configure权限。如果不需要该topic可以获取delete权限进行删除。
2、生产操作
生产消息过程:
- Kafka 会将发送消息包装为 ProducerRecord 对象, ProducerRecord 对象包含了目标主题和要发送的内容,同时还可以指定键和分区。在发送 ProducerRecord 对象前,生产者会先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。
- 接下来,数据被传给分区器。如果之前已经在 ProducerRecord 对象里指定了分区,那么分区器就不会再做任何事情。如果没有指定分区 ,那么分区器会根据 ProducerRecord 对象的键来选择一个分区,紧接着,这条记录被添加到一个记录批次里,这个批次里的所有消息会被发送到相同的主题和分区上。有一个独立的线程负责把这些记录批次发送到相应的 broker 上。
- 服务器在收到这些消息时会返回一个响应。如果消息成功写入 Kafka,就返回一个 RecordMetaData 对象,它包含了主题和分区信息,以及记录在分区里的偏移量。如果写入失败,则会返回一个错误。生产者在收到错误之后会尝试重新发送消息,如果达到指定的重试次数后还没有成功,则直接抛出异常,不再重试。
涉及到的资源操作:
1、topic:用户进行生产消息时,消息最后是落到topic的分区上的,因此需要具有写入数据的topic的生产权限,此外还需要describe权限。
2、transactionalid:当客户端开启事务特性时,会对客户端请求和Coordinator请求进行鉴权,建议是当开启事务特性时,给用户同事授予“publish”和“Describe”权限。
3、cluster:
1)当集群配置了自动创建topic,当客户端向服务还未创建的topic发送消息时,会检查集群是否具有cluster资源的creat权限。
2)当数据写入leader分区之后,需要进行主从数据同步,因此需要cluster的Cluster Action权限,更新元数据。
3)当生产者需要写入topic中的数据不重复,则需要获取cluster的Idempotent Write幂等写入权限。
3、消费操作
消费消息过程:
- cousumer 向boker 集群提交连接请求,返回 broker controller 的通信url。
- consumer 指定要消费的topic 后, 向broker bontroller提交 消息请求。
- broker controller 将consumer 分配一个或者多个 partition leader 。并且将对应的parittion的offset 发送给 consumer。
- consumer 消费完消息后,消费者会向broker 发送一个消息被消费的反馈。也就是提交 该消息的offset。
- 当broker 接收到 offset 后,会更新到对应的consumer_offset中。
涉及到的资源操作:
1、topic:消费者需要消费指定topic中的消息的,因此需要具有topic的Consume权限,此外还需要describe权限。
2、consumer-group:消费者是以consumer-group消费者组的方式工作的,一个或者多个消费者组成消费者组消费一个topic,每个分区在同一时间消费者组中只能有一个消费者消费。因此消费消息时,需要获取consumer-group的Consume权限。
3、cluster:
1)当数据消费后,需要进行主从数据同步,因此需要cluster的Cluster Action权限,更新元数据。
备注
1、当指定用户具有生产消费权限时,该用户会默认具有describe权限,也可以进行新增describe权限。
2、当指定用户单独拒绝消费权限时,需要排除describe权限,因为生产时还需要describe权限。【单独拒绝生产同理】
3、如果测试hadoop用户的消费策略的话,需要在all-consumergroup策略中添加用户hadoop。否则,即使给了hadoop用户消费权限,会报消费者组异常,用户访问消费者组权限认证失败。权限拒绝的报错信息应该是topic认证失败。所以消费的权限认证应该是先进行consumergroup的权限认证,然后是topic权限的认证。