2017-08-06 105 views
0

我知道在Apache Kafka中,我可以編寫Producer和Partitioner,使TypeA的消息進入PartitionA,TypeB的消息進入PartitionB。我還可以編寫Consumer/ConsumerGroup,使消費者/ ConsumerGroupA僅消費PartitionA,Consumer/ConsumerGroupB僅使用assign()從PartitionB消費。Apache Kafka - 消費者之間僅消耗特定分區的負載平衡

但我真正想明白的是,這是否是一種好的做法。因爲,據我所知,這會嚴重限制我的負載平衡能力,同時增加複雜性。原因是,如果我的TypeA消息增加並且我想創建另一個Partition來處理負載,請說PartitionA2,並且我創建了更多Consumer,將新Consumer和舊Consumer添加到ConsumerGroup,並確保它們共同處理來自新的和舊的分區,我能做到嗎?

回答

0

使用assign不會限制您的負載平衡功能,但只需將新分區啓動或關閉時重新分配分區的所有問題都放在手中即可。這是你訂閱免費的方式。 關於你的具體問題,當你添加一個PartitionA2的時候肯定你可以添加另一個使用assign來分配給這個分區的使用者。

0

您可以使用訂閱API將更多使用者實例添加到使用者組。使用分配API,您必須自己處理重新平衡。 另外,如果您的應用程序依賴於分區策略(事件排序),您可能不想更改分區。例如,假設您有一個用於用戶登錄/註銷操作的分區。現在,如果您將分區更改爲具有2個分區(一個用於登錄和註銷),則您的應用程序可以在該特定用戶的登錄事件之前看到註銷事件。當然,你需要看看typeA是什麼,如果可以將typeA事件發送到2個不同的分區。

0

感謝ppatierno & mrnakumar爲您提供幫助,儘管我的TypeA事件都是獨立的,並且不需要時間排序,但是我必須處理自我平衡的事實肯定是一個下滑。