kafka消费组的再平衡策略

  • 看注释
func ConsumeGroupAssignor(assignorStr string) {
	config := sarama.NewConfig()
	switch assignorStr {
	// consumer_group
	case "stickyRoundRobin":
		// 黏性roundRobin,rebalance之后首先保证前面的分配,从后面剥离
		// topic:T0{P0,P1,P2,P3,P4,P5},消费者:C1,C2
		//	---------------before rebalance:即roundRobin
		// C1: T0{P0}	 T0{P2}		T0{P4}
		// C2:      T0{P1}    T0{P3}     T0{P5}
		// ----------------after rebalance:增加了一个消费者
		// C1: T0{P0}	 T0{P2}
		// C2:      T0{P1}    T0{P3}
		// C3:						 T0{P4}   T0{P5} until每个消费者的分区数误差不超过1
		config.Consumer.Group.Rebalance.Strategy = sarama.BalanceStrategySticky
	case "roundrobin":
		// roundRobin --逐个平均分发
		// topic: T0{P0,P1,P2},T1{P0,P1,P2,P3}两个消费者C1,C2
		// C1: T0{P0}	 T0{P2}	   T1{P1}     T1{P3}
		// C2: 		T0{P1}	  T1{P0}    T1{P2}
		config.Consumer.Group.Rebalance.Strategy = sarama.BalanceStrategyRoundRobin
	case "range":
		// 默认值 --一次平均分发
		// topic: T0{P0,P1,P2,P3},T1{P0,P1,P2,P3},两个消费者C1,C2
		// T1分区总数6 / 消费者数2 = 3 ,即该会话的分区每个消费者分3个
		// T2分区总数4 / 消费者数2 = 2 ,即该会话的分区每个消费者分2个
		// C1: T0{P0, P1, P2} 			  T1{P0, P1}
		// C2: 				T0{P3, P4, P5}  		 T1{P2, P3}
		config.Consumer.Group.Rebalance.Strategy = sarama.BalanceStrategyRange
	default:
		err := fmt.Sprintf("assignor的值在\{rang,roundRobin,stickyRoundRobin\}三个值中选择一个!\n", assignorStr)
		panic(err)
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值