生产经验——分区的分配以及再平衡

Range 以及再平衡

实操:

(1)修改主题 first 为 7 个分区。

bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --alter --topic first --partitions 7

         复制 CustomConsumer 类,创建 CustomConsumer2。这样可以由三个消费者 CustomConsumer、CustomConsumer1、CustomConsumer2 组成消费者组,组名都为“test”, 同时启动 3 个消费者,他们都在一个组别中。

启动 CustomProducer 生产者,发送 500 条消息,随机发送到不同的分区:

消费者1:消费 0,1,2分区的数据:

消费者2:消费3,4分区的数据:

消费者3:消费5,6分区的数据:

        此时做一个破坏性实验,把消费者1干掉,我们发现,前45s, 消费者2和消费者3正常接收数据,而45s后,认为消费者1退出消费者组,因此消费者1的数据会给整体给别人接受。

        如果此时再发送一波数据,那么消费者2消费0,1,2,3分区的数据,消费者3消费4,5,6分区的数据。

RoundRobin 以及再平衡

        依次在 CustomConsumer、CustomConsumer1、CustomConsumer2 三个消费者代 码中修改分区分配策略为 RoundRobin。

 //设置分区分配策略
      properties.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,"org.apache.kafka.clients.consumer.RoundRobinAssignor");

消费者2:消费 1,4分区的数据: 

 消费者0:消费0,3,6分区的数据:

 消费者1:消费2,5分区的数据:

        此时做一个破坏性实验:将消费者0干掉,0 号消费者的任务会按照 RoundRobin 的方式,把数据轮询分成 0 、6 和 3 号分区数据, 分别由 1 号消费者或者 2 号消费者消费。

        说明:0 号消费者挂掉后,消费者组需要按照超时时间 45s 来判断它是否退出,所以需要等待,时间到了 45s 后,判断它真的退出就会把任务分配给其他 broker 执行。发现1处理:2,5,3发现2处理:1,4,0,6

        (2)再次重新发送消息观看结果(45s 以后)。 1 号消费者:消费到 0、2、4、6 号分区数据 2 号消费者:消费到 1、3、5 号分区数据 说明:消费者 0 已经被踢出消费者组,所以重新按照 RoundRobin 方式分配。

Sticky 以及再平衡

        可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前, 考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量的开销。

// 修改分区分配策略
properties.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG, 
"org.apache.kafka.clients.consumer.StickyAssignor");

 三个消费者正常工作时,可以看到会尽量保持分区的个数近似划分分区。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值