我想和老师探讨一下rebalance的问题
来源:7-10 面试点:Consumer Rebalance解析

杀入互联网江湖
2022-04-13
我想了下,kafka消费者的API分为【高层抽象】和【底层抽象】,即:消费者这个客户端有两种消费方式,一个是subscribe,另一个是assign,这两者的主要区别就再于【到底想在多大层度上依赖kafka(即:想把多大的权力交予kafka)】。
使用subscribe的结果就是consumer能够被分配啥分区由kafka决定,是不受人控制的;而assign就可以人为的指定这个consumer到底是消费那个分区,另一方面,官网也有说使用assign就不会被group管理,那么我就有几个想法:
1.使用assign去消费数据,是不是就是意味着【再平衡】失效了?(理论上来说应该是的)
2.如果使用assign时【再平衡】真的失效了,那是不是意味着【组】的概念也不存在了?
(我本地实验了下:使用assign时,同一个消费组内多个消费者是可以同时消费同一个分区上的数据的,当然此时,我关闭了offset的自动提交,手动维护了offset的位移值)
3.kafka中消息的重复消费很大层度上是由于【组内成员】的频繁变动导致的,但是使用assign的时候,组的概念就消失了,那是不是意味着,使用assign的方式消费,可以很大层度上避免【消息重复消费】的问题
4.再平衡作为kafka的一个技术特性,按照道理来说,应该是可以人为的选择到底使不使用才对,那assign是不是就是【再平衡是否生效】的开关?
1回答
-
Allen
2022-04-14
subscribe和assign就好像自动挡的车和手动挡的车,一个是啥都不用管就能用, 另外一个是什么都要你自己管。 无所谓优劣,看个人喜好。
确实跟你说的一样,用了assign之后什么分组,rebalance都是不存在的,都需要你自己管理。但是他不是什么开关,就是一个脱管的API
012022-04-18
相似问题