一. KafkaConsumer訂閱topic數(shù)據(jù)的方式可以分為兩種
1. 通過subscribe方法訂閱蚪腋,api接口如下:
1.1?public void subscribe(Collection topics)胀莹;
topics:想訂閱相關(guān)topic集合
1.2?public void subscribe(Collection topics, ConsumerRebalanceListener listener)
topics:想訂閱相關(guān)topic集合
listener:當(dāng)相同group.id下有多個consumer時议蟆,會觸發(fā)topic partition的重新分配,此參數(shù)就是重新分配時的回調(diào)監(jiān)聽器
舉個例子:
例如test topic有兩個partition歹篓,partition-0和partition-1
當(dāng)group.id為test_group的consumer消費test topic的數(shù)據(jù)時瘫证,當(dāng)只有一個consumer時,這個consumer負(fù)責(zé)消費partition-0和partition-1的數(shù)據(jù)滋捶。
如果此時再有一個group.id為test_group的consumer訂閱test topic的數(shù)據(jù)時痛悯,就會觸發(fā)consumer組的再平衡處理,每一個consumer分別負(fù)責(zé)消費一個partition的數(shù)據(jù)重窟。
再平衡重新分配是如何實現(xiàn)的载萌,這個比較復(fù)雜,會在后續(xù)的文章中通過源碼,詳細(xì)介紹
1.3?public void subscribe(Pattern pattern, ConsumerRebalanceListener listener)
pattern:想訂閱相關(guān)topic的正則表達(dá)式
listener:當(dāng)相同group.id下有多個consumer時扭仁,會觸發(fā)topic partition的重新分配垮衷,此參數(shù)就是重新分配時的回調(diào)監(jiān)聽器
2. 通過assign方法訂閱,api接口如下:
2.1?public void assign(Collection partitions)
partitions:想訂閱相關(guān)topic的TopicPartition集合
此方法相當(dāng)于是人為的控制我們想要訂閱哪些topic的哪些partition
舉個例子:
例如test topic有兩個partition乖坠,partition-0和partition-1搀突,可以通過下面的方式訂閱
TopicPartition tp0 =new TopicPartition("test", 0);
TopicPartition tp1 =new TopicPartition("test", 1);
consumer.assign(Arrays.asList(tp0, tp1));
二 總結(jié)
通過上面對KafkaConsumer相關(guān)api的詳細(xì)說明,我們可以得知熊泵,這兩種方式的區(qū)別如下:
當(dāng)相同group.id下有多個消費者時仰迁,subscribe相關(guān)api方法會自動觸發(fā)消費者消費哪些topic partition的再平衡,
相反以assign相關(guān)api訂閱則不會觸發(fā)再平衡顽分。