kafka Consumer Group

本文详细介绍了Kafka的Consumer Group机制,包括其作用、offset存储变迁、Rebalance过程及位移提交策略。Consumer Group用于实现发布订阅和点对点模型,offset在0.8.2.x之后存储于内部主题。Rebalance在小组成员、订阅主题或分区变化时触发,可能导致服务短暂中断。位移提交有自动和手动两种方式,需注意避免消息重复消费。

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

kafka Consumer Group

注:本文主要参考极客时间专栏 Kafka核心技术与实战

1.Consumer Group

作用:

Consumer Group 是kafka提供的可扩展且具有容错性的机制。

Consumer Group 图解如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4HhRbNW-1598233269215)(/Users/zy1994/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/f0086e12acc701547372ff7de576ded8/Message/MessageTemp/9e20f478899dc29eb19741386f9343c8/Image/2861589533106_.pic_hd.jpg)]

Concumer group 也存在比分区多或者少的情况,多的话会导致多余的consumer Instance 分配不到分区,应该尽量避免。少的话,会导致某一个instance分配多个分区,具体根据自己的业务进行处理。

Consumer Group:实现不同的消息模型:

  • 发布订阅模型
    • 多个Consumer Group订阅一个Topic
  • 点对点模型
    • 一个Consumer Group 订阅一个Topic

kafka对Consumer Group 的分区策略 会尽可能的保证每个实例上的分区数比较均衡。

2.offset
2.1.commit offset 存储变迁

commit offset 的定义就是当前consumer 消费对应分区消息的位置。

0.8.2.x之前 0.8.2.x之后

zookeeper >>>>>>>>> kafka内部主题(Internal Topic)

zookeeper:

  • 优势
    • Broker端不需要存储数据,无状态,更容易使用高伸缩性
    • 减少了Broker需要持有的位移空间。
  • 劣势
    • zookeeper 并不适合做大量的写操作,效率比较低

internal Topic:

  • 优势
    • Kafka的Topic 天然支持高可用和高频的写操作。
  • 劣势
    • Broker 不再是无状态的。
2.2.内部主题基本信息

Topic名称:_consumer_offset

2.2.1消息格式:

(1).普通消息:

  • key
    • 通过这个key可以路由到一个具体的Consumer Group 下的一个Consumer Instance
  • value
    • offset(主要内容记录消费位移)
    • 时间戳 (为了方便kafka 对位移主题消息的操作,最主要的就是位移清理操作)
    • 用户自定义数据

(2).保存Consumer Group 的消息 (用来注册Consumer Group)

(3)删除Consumer Group offset 信息甚至是删除Group的消息格式(tombstone消息)

2.2.2消息创建时间以及如何分配

第一个Consumer程序启动的时候,会自动创建内部主题。

#内部主题的分区数 默认是50
offsets.topic.num.partitions:
#内部主题的副本数 默认是3
offsets.topic.replication.factor:

在kafka集群中还没有consumer 启动的时候可以手动创建内部主题指定分区数和副本数,但是最好还是交给kafka自己创建,因为存在手动创建存在很多的bug。

2.2.3内部主题如何提交位移:

Consumer端参数:

#开启手动提交
enable.auto.commit = false

#开启自动提交
enable.auto.commit = true

#自动提交的时间间隔
auto.commit.interval.ms
  • 手动提交
    • 使用正确的提交api 保证消息不重复消费和不丢失。
  • 自动提交
    • 优点
      • 不用用户自己提交方便
      • 能够保证消息不回丢失
    • 缺点
      • 灵活性可控性不强,丧失了对Consumer的管理
      • 只要consumer 在启动着,就会一直向Coordinator主动提交唯一,可能会导致不必要的位移提交操作。

2.2.4.内部位移主题如何获取位移

通过Consumer Group 的groupId 找到对应的分区的Leader所在的Broker,就是Coordinator所在的broker 去获取对应的信息。

2.2.5.内部主题定时清理

compaction: 整理算法

img

保证每个key的最新时间的位移。

Kafka 提供了专门的后台线程定期地巡检待 Compact 的主题,看看是否存在满足条件的可删除数据。这个后台线程叫 Log Cleaner。

如果线上存在位移主题无限膨胀的问题,建议去查看这个线程是否挂了。

3.Rebalance

Coordinator Consumer Group 进行位移主题操作的协调器

每一个Broker上都有一个Coordinator

Consumer Group 路由到对应的Coordinator上

1.根据GroupId计算出partitionId

partitionId = Math.abs(groupId.hashCode() % offsetsTopicPartitionCount)

2.找到partitionId对应的Leader所在的Broker 就是当前Consumer Group 需要的Coordinator

3.1Rebalance触发的时机:
  • 小组成员发生变化
  • 订阅主题数发生变化
  • 主题分区数发生变化
3.2Rebalance的劣势
  • 影响Consumer 端的TPS,Rebalance期间,整个Consumer Group 的Consumer Intance 都不在提
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值