美文网首页大数据
Kafka Offset Topic

Kafka Offset Topic

作者: 阿猫阿狗Hakuna | 来源:发表于2019-08-22 11:19 被阅读0次

Kafka中有一个位移主题:__consumer_offsets。
老版本的Kafka将位移保存在Zookeeper中,但是位移的更新是一个很频繁的写动作,Zookeeper并不适合于做频繁的写动作,这会极大的拖慢Zookeeper的性能。所以新版本使用一个topic专门保存Consumer的offsets。

__consumer_offsets是一个普通的kafka主题,但它的消息格式是kafka自己定义的,用户不能修改,且不能随意地向这个主题写消息。

__consumer_offsets主题存的是什么格式的消息呢?
可以简单理解为是一个KV对。
Key保存标识Consumer的字段,也就是Group ID。还需要保存分区的标识。所以topic的主题key中应该保存三部分内容:<Group ID,主题名,分区号>。
Value保存的是位移值,以及时间戳和用户自定义的数据等。

除了这种格式,还有另外两种格式:

  • 用于保存Consumer Group信息的消息——用来注册Consumer Group
  • 用于删除Group过期位移甚至是删除Group的消息——删除标记,消息体是null。

__consumer_offsets是怎么创建的?
当Kafka集群中的第一个Consumer程序启动时,Kafka会自动创建位移topic。其默认的分区数是50,副本数是3。

Kafka怎么提交offsets?
目前由两种方法:自动提交offsets和手动提交offsets。
若enable.auto.commit为true,则Consumer定期自动提交offset,间隔时间由auto.commit.interval.ms控制。
如果选择自动提交位移,那么就存在一个问题:只要Consumer一直启动,它就会无限期向位移主题写入消息。

Kafka怎么删除位移主题中的过期消息?
Compaction。对于同一个key的两条消息M1和M2,如果M1的发送时间早于M2,那么M1就是过期消息。Compact的过程会扫描这些消息,剔除过期消息,把剩下的消息整理在一起。

image.png
Kafka提供了后台线程定期检查,看是否存在满足条件的可删除数据,这个线程叫Log Cleaner。

相关文章

网友评论

    本文标题:Kafka Offset Topic

    本文链接:https://www.haomeiwen.com/subject/qmogsctx.html