每一個consumer實例都屬於一個consumer group,每一條消息只會被同一個consumer group里的一個consumer實例消費。(不同consumer group可以同時消費同一條消息)
很多傳統的message queue都會在消息被消費完后將消息刪除,一方面避免重復消費,另一方面可以保證queue的長度比較少,提高效率。而如上文所將,Kafka並不刪除 已消費的消息,為了實現傳統message queue消息只被消費一次的語義,Kafka保證保證同一個consumer group里只有一個consumer會消費一條消息。與傳統message queue不同的是,Kafka還允許不同consumer group同時消費同一條消息,這一特性可以為消息的多元化處理提供了支持。實際上,Kafka的設計理念之一就是同時提供離線處理和實時處理。根據這一 特性,可以使用Storm這種實時流處理系統對消息進行實時在線處理,同時使用Hadoop這種批處理系統進行離線處理,還可以同時將數據實時備份到另一 個數據中心,只需要保證這三個操作所使用的consumer在不同的consumer group即可。
說明:創建一個topic (名為topic1),創建一個屬於group1的consumer實例,並創建三個屬於group2的consumer實例,然后通過producer 向topic1發送key分別為1,2,3r的消息。結果發現屬於group1的consumer收到了所有的這三條消息,同時group2中的3個 consumer分別收到了key為1,2,3的消息。