李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
12.Kafka之offset介绍
Leefs
2021-09-27 PM
3431℃
0条
[TOC] ### 一、概述 #### 1.1 概念 消费者消费完了消息是不会被立刻删除的,每个消费者把消费的数据消费到哪里了就需要做个记录,就是offset。 #### 1.2 版本 Kafka 0.9版本之前,consumer默认将offset保存在Zookeeper中,从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic中,该topic为"__consumer_offsets" 。 ![12.Kafka之offset详解02.png](https://lilinchao.com/usr/uploads/2021/09/3391436842.png) ![12.Kafka之offset详解03.png](https://lilinchao.com/usr/uploads/2021/09/1312322405.png) **__consumer_offsets说明:** ```basic 这个topic下的消息格式为k-v结构,k-v分别代表消息的键值和消息体。 k-(Group ID,主题名,分区号) v-(位移值,ts,metadata) ``` **__consumer_offset何时被创建?** **当 Kafka 集群中的第一个 Consumer 程序启动时,Kafka 会自动创建位移主题**. **如果位移主题是 Kafka 自动创建的,那么该主题的分区数是 50,副本数是 3** **Kafka将offset从Zookeeper移到__consumer_offsets的原因?** 由于Zookeeper并不适合大批量的频繁写入操作,offset保存过程需要进行频繁的读写,这个时候Zookeeper将成为整个过程中性能最大的瓶颈,为了提高性能,Kafka将offset从Zookeeper移到__consumer_offsets。 #### 1.3 作用 由于consumer 在消费过程中可能会出现断电宕机等故障,consumer恢复后,需要从故障前的位置的继续消费,所以 consumer 需要实时记录自己消费到了哪个 offset,以便故障恢复后继续消费。 ![12.Kafka之offset详解01.png](https://lilinchao.com/usr/uploads/2021/09/2836115041.png) ### 二、Offset查询命令 #### 2.1 查询__consumer_offsets topic所有内容 **(1)修改配置文件 `consumer.properties`** ```properties exclude.internal.topics=false ``` **(2)读取offset** **0.11.0.0 之前版本:** ```bash bin/kafka-console-consumer.sh --topic __consumer_offsets -- zookeeper 127.0.0.1:2181 --formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter" --consumer.config config/consumer.properties --from-beginning ``` **0.11.0.0 之后版本(含):** ```shell bin/kafka-console-consumer.sh --topic __consumer_offsets -- zookeeper 127.0.0.1:2181 --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageForm atter" --consumer.config config/consumer.properties --from-beginning ``` #### 2.2 计算指定consumer group在__consumer_offsets topic中分区信息 **(1)获取该consumer group的group id** ```shell bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list --new-consumer ``` **输出** ```basic console-consumer-46965 ``` 该group.id会用于下一步计算。 **(2)计算group保存分区** 计算规则 > Math.abs(groupID.hashCode()) % numPartitions ``` Math.abs("console-consumer-46965".hashCode()) % 50 = 11 ``` 即__consumer_offsets的分区11保存了这个consumer group的位移信息。 #### 2.3 获取指定consumer group的位移信息 **0.11.0.0版本之前** ```shell # partition 11 中11为上步计算的分区 bin/kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 11 --broker-list 127.0.0.1:9092 --formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter" ``` **0.11.0.0版本以后(含)** ```shell bin/kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 11 --broker-list 127.0.0.1:9092 --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter" ``` *说明:关于offset自动和手动提交将在后面API部分进行介绍。* *附:参考文章链接* *https://www.cnblogs.com/huxi2b/p/6061110.html*
标签:
Kafka
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1546.html
上一篇
11. Kafka消费者分区分配策略
下一篇
13.Zookeeper在Kafka中的作用
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
6
标签云
栈
SpringCloudAlibaba
Jenkins
Kibana
并发编程
数据结构
Beego
Golang
Http
JavaWeb
Shiro
Yarn
BurpSuite
Scala
队列
二叉树
ajax
Flink
Quartz
线程池
pytorch
Python
JavaScript
DataWarehouse
高并发
Hbase
nginx
散列
Thymeleaf
查找
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭