Kafka消费者那些事...

本文深入探讨了Kafka消费者的再均衡过程,包括其对高可用性和伸缩性的影响,以及可能导致的短暂不可用和消息重复。同时介绍了ConsumerRebalanceListener接口,用于在再均衡过程中管理和提交消费位移。此外,文章还讨论了指定位移消费和消费者拦截器的概念,拦截器允许在消费和提交位移时执行自定义操作,增强了Kafka消费者的灵活性和可控性。
摘要由CSDN通过智能技术生成

再均衡

再均衡是指分区的所属权从一个消费者转移到另一消费者的行为,它为消费组具备高可用
性和伸缩性提供保障,使我们可以既方便 又安全地删除消费组内的消费者或往消费组内添加消 费者。
不过在再均衡发生期间,消费组内的消费者是无法读取消息的。 也就是说,在再均衡发生期间的这一小段时间内,消费组会变得不可用 。另外,当 一个分区被重新分配给另一个消费 者时, 消费者当前的状态也会丢失。
比如消费者消费完某个分区中的一部分消息时还没有来得 及提交消费位移就发生了再均衡操作 , 之后这个分区又被分配给了消费组内的另一个消费者, 原来被消费完的那部分消息又被重新消费一遍,这也是Kafka消息重复消息的一个例子。
为了再均衡发生时候保证系统的稳定,Kafka为我们提供了 ConsumerRebalanceListener用来在在均衡发生的开始和末尾 做一些我们需要做的事情。
ConsumerRebalanceListener是一个接口,包含两个方法:

void onPartitionsRevoked(Collection<TopicPartition> partitions)
这个方法会在再均衡开始之前和消费者停止读取消息之后被调用。可以通过这个回调方法
来处理消费位移 的提交, 以此来避免一些不必要的重复消费现象的发生。参数 partitions 表 示再均衡前所分配到的分区。

void onPartitionsAssigned(Collection<TopicPartition> partitions)
这个方法会在重新分配分区之后和消费者开始读取消费之前被调用 。参数 partitions 表
示再均衡后所分配到的分区 。
实例代码:

  public static Properties initConfig() {
   
        Properties props = new Properties();
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
                StringDeserializer.class.getName());
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
                StringDeserializer.class.getName());
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, brokerList);
        props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
        return props;
    }

    public static void main(String[] args) {
   
        Properties props = initConfig()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值