kafka位移主题(__consumer_offsets)

Kafka的位移主题(__consumer_offsets)用于存储消费者位移信息,取代了旧版的Zookeeper。位移主题是普通Kafka主题,但其消息格式由Kafka定义,不可随意修改。位移主题的key包含GroupID、主题名和分区号,消息体存储位移值及其他元数据。位移提交可自动或手动,自动提交可能影响位移管理的精确性。位移主题的垃圾回收通过Compaction进行,定期删除过期数据。创建位移主题通常在第一个Consumer启动时自动完成,也可手动创建,但不推荐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  位移主题:(__consumer_offsets)它是kafka的内部主题。

介绍

  上一篇文章中我们将了位移信息的存储是要区分新老版本的,在老版本中位移信息是存放在zookeeper中的,而新版本的位移信息存放在Kafka自身的位移主题中。
  放在kafka自身的原因是,保存位移信息需要保证高频的写操作以及保存的持久性,但是zookeeper并不适合用于高频写操作的场景下。而kafka本身就适合用于频繁的写操作,所以正适合。
  说明一下:位移主题和我们自己创建的主题一样,就是普通的kafka主题。我们可以手动的创建,修改,甚至删除它。不过,大部分情况下,我们不需要花时间去管理它,kafka会照顾好它的。
  不过,尽管它是一个普通的主题,但是,它的消息格式确实kafka自己定义的。我们不能修改,也就是我们不能随意向这个主题写消息。因为一旦我们写的消息不满足kafka的格式要求,kafka就无法解析,有可能造成broker的崩溃。kafka Consumer有API帮咱们提交位移。

位移主题的key中保存的内容

  位移主题的key中应该保存三部分:<Group ID,主题名,分区号>
  消息体中,存储的出了位移值之外,还要保存位移提交的一些其它元数据,例如:时间戳和用户自定义的数据等。不过里面最重要的还是位移值。
  消息格式里面,刚刚说的只是其中一种,还有另外两种:
1:保存Consumer Group 消息的消息。它是用来注册Consumer Group的
2:用于删除Group过期位移甚至是删除Group的消息。它是tombstone消息(墓碑消息),也称delete mark。它的主要特征是它的消息体是null,即空消息。
  这种消息当某个Consumer Group下的所有Consumer实例都停止了,而且他们的位移数量都已被删除时,kafka会向位移主题的对应分区写入tombstone消息,表明要彻底删除这个Group的消息。

位移主题的创建

  通常,当kafka集群中的第一个Consumer程序启动时,kafka会自动创建位移主题。如果位移主题时kafka自动创建的,那么该主题的分区数是50,副本数是3。
  你也可以选择手动创建位移主题,方法是:在kafka集群尚未启动任何Consumer时,使用kafka API创建它。手动创建可以更好的适应你的业务逻辑,但是并不推荐使用。

位移的提交

  位移提交的方式有两种:自动提交和手动提交。Consumer端有个参数enable.auto.commit,如果值是true,则Consumer在后台默认的为你定期提交位移,提交间隔由一个专属的参数:auto.commit.interval.ms来控制。自动提交的有点就是省事,但是并不推荐,因为这样你完全无法把控Consumer端的位移管理。

位移主题的垃圾回收。

  我们知道,位移主题会有大量的写数据,并且它是实时性的数据,那他就会有很多过期的数据,那如何清理呢?它的清理使用的:Compaction(压缩或者整理)。他会通过这种方式,将能表示当前主题真实数据的数据保留,前面的过期的过程数据删除掉。例如:
在这里插入图片描述
  kafka提供了专门的后台线程定期的检查待Compact的主题,看看是否存在满足条件的可删除数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值