Kafka内部主题(Internal Topic):__Consumer_offsets
一.位移主题
老版本
- 老版本Cosumer位移管理依托于Apache Zookeeper:他会自动或手动将位移数据提交到Zookeeper保存。
- 当Consumer重启,它能自动从Zookeeper中读取位移数据,从而在上次消费截止的地方继续消费。
- 这种设计使kafka Broker不需要保存位移数据,减少Broker端需要持有的状态空间,实现高伸缩性。
新版本
- 将consumer的位移数据作为一条条普通的kafka消息,提交__consumer_offsets中。
- 该主题保存kafka消费者的位移信息。
必须实现
- 必须实现高持久性,支持高频的写操作
二.位移主题的消息格式
位移主题的 Key 中应该保存 3 部分内容:
Group ID,主题名,分区号
- 保存这些元数据是为了帮助 Kafka 执行各种各样后续的操作,比如删除过期位移消息等。
- 保存 Consumer Group 信息的消息。
- 删除 Group 过期位移甚至是删除 Group 的消息。
tombstone消息
墓碑消息---delete mark
- 何时写入这类消息
- 一旦某个consumer Group下的所有Consumer实例都停止了他们的位移数据都已经被删除了
- kafka就会向位移主题对应的分区写入tomstone消息,表示要彻底删除这个Group的信息。
Kafka集群中的第一个consumer程序时,kafka会自动创建位移主题。
位移主题是kafka自动创建的,该主题的分区数是50,副本数是3
consumer提交位移的两种方式:
- 自动提交位移
- 手动提交位移
设置参数 enable.auto.commit,默认为自动提交
auto.commit.interval.ms:提交间隔
三.无限制的向位移主题写入消息
- 自动提交位移:只要consumer一直启动,就会无限的向位移主题写入消息
- 位移主题会不停写入位移消息,这就要求kafka必须有针对性的对位移主题消息特点的消息删除策略,否则消息会越来越多,撑爆炸整个磁盘。
四.删除位移主题过期消息---Compact 策略(整理)
- kafka使用Compact策略删除位移主题中的过期消息,避免该主题无限期膨胀
- 对于同一个key(同一个主题)的两个消息M1和M2,如果M1发送的时间早于M2,那么M1就是过期消息
- Compact过程就是扫描日志的所有消息,剔除那些过期的消息,然后将剩下的消息整理在一起
Kafka专门提供后台线程定期的巡检待Compact主题,这个后台线程叫Log cleaner
生产环境很多都出现过位移主题无限膨胀占用过多磁盘空间的问题,通常是线程挂掉导致。
Kafka 事务是一个内部主题
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: