kafka __consumer_offsets
介绍
kafka在0.10.x版本后默认将消费者组的位移提交到自带的topic__consumer_offsets
里面,当有消费者第一次消费kafka数据时就会自动创建,它的副本数不受集群配置的topic副本数限制,分区数默认50(可以配置),默认压缩策略为compact
结构
key
version
: 版本字段,不同kafka版本的version不同group
: 对应消费者组的groupid,这条消息要发送到__consumer_offset
的哪个分区,是由这个字段决定的topic
: 主题名称partition
: 主题的分区
value
version
: 版本字段,不同kafka版本的version不同offset
: 这个groupid消费这个topic到哪个位置了metadata
: 自定义元数据信息commit_timestamp
: 提交到kafka的时间expire_timestamp
: 过期时间, 当数据过期时会有一个定时任务去清理过期的消息
计算消息提交到__consumer_offsets
哪个分区的算法
java
Math.abs("test".hashCode()) % 50;//48, 表示test这个groupid的offset记录提交到了__consumer_offset的48号分区里
查看__consumer_offsets
的数据
//kafka0.11以后
kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 25 --broker-list localhost:9092 --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter"
//kafka0.11以前
kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 25 --broker-list localhost:9092 --formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter"
总结
__consumer_offsets
这个topic官方建议不要随便修改它,如遇特殊情况:如1. 某个分区量过大。2. 数据不会自动清理。等问题 那么就需要人工处理了,至于怎么处理,在下个文章分享