前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kafka扩分区和分区副本重分配之后消费组会自动均衡吗?

Kafka扩分区和分区副本重分配之后消费组会自动均衡吗?

作者头像
石臻臻的杂货铺[同名公众号]
发布2022-11-12 11:47:54
6450
发布2022-11-12 11:47:54
举报
文章被收录于专栏:kafka专栏kafka专栏

作者:石臻臻, CSDN博客之星Top5、Kafka Contributor 、nacos Contributor、华为云 MVP ,腾讯云TVP, 滴滴Kafka技术专家 、 KnowStreaming PMC)

Know Streaming 是滴滴开源的Kafka运维管控平台, 有兴趣一起参与参与开发的同学,但是怕自己能力不够的同学,可以联系我,带你一起你参与开源! 。

KnowStreaming 体验环境请访问:https://demo.knowstreaming.com/

最近有个靓仔问我, 扩分区之后 消费组会不会重新平衡呢?

那我们今天从源码的角度来一起分析一下, 扩分区能否重平衡?

问题

Kafka扩分区 或者 分区副本重分配之后 是否会自动重新平衡?

源码探究

ConsumerCoordinator#rejoinNeededOrPendin

代码语言:javascript
复制
    @Override
    public boolean rejoinNeededOrPending() {
        if (!subscriptions.hasAutoAssignedPartitions())
            return false;

        // we need to rejoin if we performed the assignment and metadata has changed;
        // also for those owned-but-no-longer-existed partitions we should drop them as lost
        // 如果订阅的Topic元信息有过变更,则需要重新发起joinGroup请求
        if (assignmentSnapshot != null && !assignmentSnapshot.matches(metadataSnapshot)) {
            log.info("Requesting to re-join the group and trigger rebalance since the assignment metadata has changed from {} to {}",
                    assignmentSnapshot, metadataSnapshot);

            requestRejoin();
            return true;
        }

        // we need to join if our subscription has changed since the last join
        //如果我们的订阅自上次加入以来发生了变化,我们需要重新发起请求 JoinGroup
        if (joinedSubscription != null && !joinedSubscription.equals(subscriptions.subscription())) {
            log.info("Requesting to re-join the group and trigger rebalance since the subscription has changed from {} to {}",
                joinedSubscription, subscriptions.subscription());

            requestRejoin();
            return true;
        }

        return super.rejoinNeededOrPending();
    }

这段代码就是用于判断是否能够重新发起JoinGroup请求的逻辑。

主要有以下两点:

如果订阅的Topic元信息有过变更,则需要重新发起joinGroup请求

如果我们的订阅自上次加入以来发生了变化,我们需要重新发起请求 JoinGroup

所以很好理解

如果我们扩分区了或者分区副本重分配了, 那么就属于Topic的元信息有过变更了。这里的判定逻辑及时True。需要重平衡

如果我们订阅的Topic有变更(新增删除)了,那么也需要重平衡

当然这个接口触发时机是 KafkaConsumer.poll

结论

消费者客户端在Poll数据进行消费的时候,会先去判断是否需要进行重平衡。

判断条件是:如果订阅的Topic元信息有变更,或者订阅的Topic有增删,都需要进行重平衡之后再去Poll数据。

而分区副本重分配和 扩分区 因为属于变更了订阅的Topic元信息, 则需要重平衡

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档