Kafka指标性能分析
1) 根据group组查看消费情况(数值不准,仅可参考)
根据之前的分析,只有driver的consumer会提交offset,因此通过
./kafka-consumer-groups.sh命令能够查看对应分区的消费情况,如下图:
对应时间段的批次执行时间。
这样能够看出,这个时间段消费的数据是从哪个offset到哪个offset的数据段,可以根据这个时间看出是否有数据挤压。
注意:
1, 只有在consumer的配置文件中设置了enable.auto.commit=true才能使用./kafka-consumer-groups.sh命令查看,spark内部并没有自动提交这个offset的机制。
2, LAG的数值在这里是不准确的,因为使用自动提交后有提交时间间隔,因此存在时间不同步的情况。LAG值仅可作为参考。
2) 抽样最新的数据
可以使用新的消费命令查看,最新的数据的offset是哪个,如下图:
./kafka-verifiable-consumer.sh --topic testsparktopic --group-id test_$(date +%s)
--verbose --consumer.config ../config/consumer.properties --broker-list kafka业务ip:21007 --reset-policy latest --max-messages 100
其中核心参数含义如下:
--topic 为要抽样的topic名称
--group-id 本次消费的groupid,要求每次获取最新的offset需要使用最新的groupID
--verbose 是否打印出具体的数据
--consumer.config 消费者的配置文件路径
--reset-policy 消费offset得到策略
--max-messages 消费多少条数据,若指定为-1则会一直消费直到手动停止消费任务
执行后消费情况如下:
核心的数据结构如下:
Timestamp:为时间戳,默认是数据发送时间。
Key:数据的key值,若不设置则为null。
Value:数据的值。
Topic:topic名称。
Partition:消费数据所属的分区编号。
Offset:消费数据的偏移量。
说明:由于每次需要获取的offset一定是最新的,因此,每次消费的时候必须使用最新的groupID。
3) 消费指定位置的数据,并且查看时间消息的生产时间
当排查问题涉及到数据延时的时候,需要分析一下当时数据产生的时间是什么时候,这个时候需要分析一下数据生产的时间和消费批次时间之间的对应关系。
假设需要定位:3分区,1000~2000之间的数据信息。
(1) 消费100条数据,设置group组为testgroup,让消费者组生效
./kafka-verifiable-consumer.sh --topic testsparktopic --broker-list 189.39.234.219:21007 --verbose --consumer.config ../config/consumer.properties --max-messages 100 --group-id testgroup
(2) 使用kafka-consumer-group命令看一下对应的消费状况
(3) 重置offset,将组内的所有offset重置到1000
./kafka-consumer-groups.sh --bootstrap-server 189.39.234.219:21007 --new-consumer --to-offset 1000 --reset-offsets --group testgroup --command-config ../config/consumer.properties --all-topics
(4) 再消费2000条数据
./kafka-verifiable-consumer.sh --topic testsparktopic --broker-list 189.39.234.219:21007 --verbose --consumer.config ../config/consumer.properties --max-messages 2000 --group-id testgroup
此处可以看到消费结果。
(5) 查找offset=2000的时间戳为1585316904936,这个时间即为这条数据开始发送的时间。