Kafka-offset查看与变更


一、环境介绍

主机名

IP

Mysql角色

kerberbos

dcdl-test-namenode1

10.2.98.128

Kafka Broker Default Group

非kdc认证

dcdl-test-datanode1

10.2.96.129

Kafka Broker Default Group

kdc认证

dcdl-test-datanode2

10.2.96.130

Kafka Broker Group 1

kdc认证

dcdl-test-datanode3

10.2.96.131

Kafka Broker Default Group

kdc认证

 

二、在非kerberbos认证下kafka offset变更

1、创建测试kafka topic

 kafka-topics --create --zookeeper dcdl-test-datanode1.essence.com:2181 --replication-factor 1 --partitions 1 --topic test2

 

2、查看创建kafka topic

kafka-topics --zookeeper 10.2.98.128:2181 --list

 

 

3、向kafka topic 写入数据

kafka-console-producer --broker-list 10.2.98.128:9092 --topic test2

 

4、消费kafka topic 数据信息

kafka-console-consumer --bootstrap-server 10.2.98.128:9092 --group offset-group  --topic test2

 

5、查看消费者消费偏移量

kafka-consumer-groups --bootstrap-server 10.2.98.128:9092 --group offset-group  --describe

 

Current-offset与log-end-offset 相等表示kafka topic 消息已全部消费完毕

6、设置kafka topic offset为最初偏移量

kafka-consumer-groups --bootstrap-server 10.2.98.128:9092 --group offset-group --topic test2 --reset-offsets --to-earliest --execute

 

注意:Offset-group必须是非活跃状态,退出消费。

 

查看topic test2的offset 与第5步骤对比已回到最初的偏移量

7、设置kafka topic offset任意偏移量

kafka-consumer-groups --bootstrap-server 10.2.98.128:9092 --group offset-group --topic test2 --reset-offsets --to-offset 8 --execute

 

 

查看topic test2的offset与第7步骤对比current-offset向前偏移8

 

 

 

 

三、Kafka在kerberbos认证下查看与修改topic offset

1、以kafka用户为测试背景,导入kafka用户变量

配置kafka用户 kerberbos认证相关文件

 

修改client.properties文件

 

export KAFKA_OPTS="-Djava.security.auth.login.config=/home/kafka/jaas-keytab.conf"


2、创建kafka topic

kafka-topics --create --zookeeper 10.2.98.129:2181/kafka2 --replication-factor 1 --partitions 1 --topic offsettest



3、向kafka topice offsettest写入数据

kafka-console-producer --broker-list 10.2.98.129:9092,10.2.98.130:9092,10.2.98.131:9092 --topic offsettest --producer.config /home/kafka/client.properties


 

4、消费kafka topic offsettest消息

kafka-console-consumer --bootstrap-server 10.2.98.129:9092,10.2.98.130:9092,10.2.98.131:9092 --group offset-group --topic offsettest --consumer.config /home/kafka/client.properties



5、查看kafka topic offsettest的消费者消费偏移量

kafka-consumer-groups --bootstrap-server 10.2.98.129:9092,10.2.98.130:9092,10.2.98.131:9092 --group offset-group  --describe --command-config /home/kafka/client.properties


 

提示:current-offset与log-end-offset相等,及lag等于0,表示topic 已全部消费


6、设置kafka topic offsettest 最初偏移量

kafka-consumer-groups --bootstrap-server 10.2.98.129:9092,10.2.98.130:9092,10.2.98.131:9092 --group offset-group --topic offsettest --reset-offsets --to-earliest --execute --command-config /home/kafka/client.properties

 

注意:Offset-group必须是非活跃状态,退出消费。

 

提示:查看topic offsettest的current-offset更改0, LAG变更为19,与第5步相比已回至最初偏移量


7、设置kafka topic偏移量任意值

kafka-consumer-groups --bootstrap-server 10.2.98.129:9092,10.2.98.130:9092,10.2.98.131:9092 --group offset-group --topic offsettest --reset-offsets --to-offset 8 --execute --command-config /home/kafka/client.properties


 

提示:查看topic offsettest的CURRENT-OFFSET变更为8,与第6步骤相比LAG已减少8变更为11.











四、普通用户查看,修改offset所需最小权限

1、以用户kafka_test,topic: offsettest; 消费者组:testgroup 测试背景

2、kerberos认证用户,导入kafka_test 变量

$ kinit -kt /**/**/kafka_test.keytab

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/kafka_test/jaas-keytab.conf"

$ vi client.properties

 

 

3、在管理用户kafka下授于用户kafka_test Topic读/写权限

kafka-sentry -gpr -r risk_role -p "Topic=offsettest->action=read"

kafka-sentry -gpr -r risk_role -p "Topic=offsettest->action=read"

kafka-sentry -arg -r risk_role -g kafka_test

 

4、向topic offsettest写入数据

kafka-console-producer --broker-list

dcdl-test-datanode2.essence.com:9092,dcdl-test-datanode1.essence.com:9092,dcdl-test-datanode3.essence.com:9092 --topic offsettest --producer.config client.properties

 

提示:没有权限写入数据

 

5、在kafka_test用户下消费topic offsettest数据

kafka-console-consumer --bootstrap-server dcdl-test-datanode2.essence.com:9092,dcdl-test-datanode1.essence.com:9092,dcdl-test-datanode3.essence.com:9092 --group testgroup --topic offsettest --consumer.config client.properties

 

提示:没有权限读取topic数据

 

6、在管理用户kafka下授于普通用户kafka_test topic offsettest的describe权限

kafka-sentry -gpr -r risk_role -p "Topic=offsettest->action=describe"

kafka-sentry -arg -r risk_role -g kafka_test

 

7、在kafka_test用户下topic offsettest再次生产,消费数据

kafka-console-producer --broker-list

dcdl-test-datanode2.essence.com:9092,dcdl-test-datanode1.essence.com:9092,dcdl-test-datanode3.essence.com:9092 --topic offsettest --producer.config client.properties

 

提示:授于topic的describe权限后,已可以生产数据

kafka-console-consumer --bootstrap-server dcdl-test-datanode2.essence.com:9092,dcdl-test-datanode1.essence.com:9092,dcdl-test-datanode3.essence.com:9092 --group testgroup --topic offsettest --consumer.config client.properties

 

提示:授于topic的describe权限后,已可以消费数据

 

8、在topic offsettest有read,write,describe权限,查看topic offset

kafka-consumer-groups --bootstrap-server dcdl-test-datanode2.essence.com:9092,dcdl-test-datanode1.essence.com:9092,dcdl-test-datanode3.essence.com:9092 --group testgroup  --describe --command-config client.properties

 

提示:此步说明无需授权消费者组testgroup,可查看offset

 

 

9、授权消费者组testgroup write,describe权限

kafka-sentry -gpr -r risk_role -p "CONSUMERGROUP=testgroup->action=write"

kafka-sentry -gpr -r risk_role -p "CONSUMERGROUP=testgroup->action=describe"

kafka-sentry -arg -r risk_role -g kafka_test

 

10、修改topic offsettest的最初偏移量

kafka-consumer-groups --bootstrap-server dcdl-test-datanode2.essence.com:9092,dcdl-test-datanode1.essence.com:9092,dcdl-test-datanode3.essence.com:9092 --group testgroup --topic offsettest --reset-offsets --to-earliest --execute --command-config client.properties

 

11、提示:消费者组testgroup是从offset 23起始消费,修改最初偏移量到23.

 

 

 

 

12、由以上步骤得出普通用户访问kerberos 认证kafka topic以及修改offset的权限如下

(1) 在给Topic赋权read或者write权限时,务必同时带上describe权限,否则权限不生效。当然你也可以将权限设置为ALL.

(2) 在kafka 消费者组授权write权限时,也务必同时带上decribe权限,否则权限不生效。

(3) 修改kafka offset时,消费者组必须是无成员状态下,否则无法修改offset.