2016-10-13 251 views
1

試圖瞭解卡夫卡文檔中關於消費者如何訪問消息的措辭。卡夫卡消費者行爲

http://kafka.apache.org/documentation.html#intro_consumers http://kafka.apache.org/documentation.html#theconsumer

從我個人理解,如果有一個以上的消費者具有相同消費羣消息將在一組被傳遞到只有一個消費者用。我的問題是在這個行中提到的交付機制是PUSH還是PULL? 如果是PUSH被認爲是交付的(交付語義)。如果它是拉卡夫卡夫卡如何確保每個消息只被一個消費者閱讀(消費者之間的同步)?謝謝!

+0

它說:「從消費者的經紀人拉」。所以這絕對是一個拉。 – mfirry

+0

是的,這是我得到的印象,但要仔細檢查。你是否知道問題其他部分的答案。 – useful

+0

通讀它說:「消費者用消費者組名稱標記自己,並且發佈到主題的每個記錄都被傳遞到每個訂閱消費者組中的一個消費者實例。(...)如果所有消費者實例具有相同的消費者組,那麼記錄將有效地在消費者實例上進行負載均衡,如果所有消費者實例具有不同的消費者組,則每個記錄將被廣播到所有消費者進程。 不知道它回答你的疑惑。 – mfirry

回答

0

如果它的拉如何kafka確保每個消息只有一個消費者閱讀?

這取決於你的意思是「卡夫卡」。經紀人不檢查任何東西,因爲它是模型(即,經紀人提供消費者要求的數據,而不關心其他任何東西)。

因此,分工是消費者的責任。例如,使用KafkaConsumer,所有消費者實例通過「組管理協議」進行對話(該協議由代理提供;其他非Java客戶端也提供組管理功能)。這允許實例決定哪一個處理哪個主題分區。因此,每個分區只能分配給一個用戶。它基本上是一個「契約」:消費者實例彼此交談,並且每個消費者承諾僅消耗分配給它的分區的數據。

如果您想了解更多,請參閱卡夫卡維基:https://cwiki.apache.org/confluence/display/KAFKA/Kafka+0.9+Consumer+Rewrite+Design