文章目录

  • 前言
  • 一、资源类型
  • 二、不同资源所对应的权限
  • 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权限的认证。