kafka-demo 6 分区再均衡

本文探讨了Kafka消费者群组中的分区再均衡现象,详细介绍了当消费者加入、离开或主题变化时,如何进行分区所有权的转移。再均衡对群组的高可用性和伸缩性至关重要,但也可能导致短暂的服务中断和消费者状态丢失。文章通过实例讲解如何使用ConsumerRebalanceListener来监听和处理再均衡事件。
摘要由CSDN通过智能技术生成

6 分区再均衡

代码地址:https://github.com/luslin1711/kafka_demo/tree/master/kafka_demo_06

消费者群组里的消费者共同读取主题的分区。一个新的消费者加入群组时,它读取的是原来由其他消费者读取的消息。当一个消费者被关闭或者发生崩溃时,他就离开群组,原本由它读取的分区将由群组里的其他消费者读取。在主题发生变化时,如添加了新的分区,也会发生分区重分配。

分区的所有权从一个消费者转移到另一个消费者,这被称为再均衡。再均衡非常重要,它为消费者群组带来了高可用性和伸缩性。不过在正常情况下,我们不希望发生这样的行为。在再均衡期间,消费者无法读取消息,造成整个群组一小段时间的不可用。另外,当分区被重新分配给另一个消费者时,消费者当前的读取状态会丢失,它有可能还需要去刷新缓存,在它重新恢复状态之前会拖慢应用程序。

一、 再均衡监听器

在为消费者分配新的分区或移除旧的分区时,可以通过消费者API执行一些应用程序代码,在调用subscribe()方法穿进去一个ConsumerRebalanceListener.

import org.apache.kafka.clients.consumer.ConsumerRebalanceListener;
import org.apache.kafka.clients.consumer.OffsetAndMetadata;
import org.apache.kafka.common.TopicPartition;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class DefaultRebalanceListener implements ConsumerRebalanceListener {
   
    private Map<TopicPartition, OffsetAndMetadata> currentOffsets = new HashMap<>();
    private org.apache.kafka.clients.consumer.Consumer consumer;

    public DefaultRebalanceListener(org.apache.kafka.clients.consumer.Consumer consumer) {
   
        this.consumer = consumer;
    }


    public void put(TopicPartition partition, OffsetAndMetadata offsetAndMetadata) {
   
        currentOffsets.put(partition, offsetAndMetadata);
    }

    public Map<TopicPartition, OffsetAndMetadata> getCurrentOffsets(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值