2016-12-14 31 views
8

當使用Kafka和Zookeeper時,我對存儲偏移量的位置感到困惑。在一些情況下,偏移似乎存儲在Zookeeper中,在其他情況下,它們存儲在Kafka中。保存在Zookeeper或Kafka中的偏移量?

什麼決定偏移量是存儲在卡夫卡還是存儲在Zookeeper中?什麼是利弊?

注:當然,我也可以在一些不同的數據存儲中存儲偏移量,但這不是本文的圖片的一部分。

關於我的設置更多的細節:

  • 我運行這些版本:KAFKA_VERSION = 「0.10.1.0」,SCALA_VERSION = 「2.11」
  • 我用卡夫卡節點連接到卡夫卡/動物園管理員從我NodeJS應用程序。

回答

21

卡夫卡的舊版本(預0.9)店偏移量ZK而已,而內部卡夫卡主題卡夫卡的新版本,默認情況下店偏移稱爲__consumer_offsets(較新的版本可能仍然致力於儘管ZK)。

向代理商提交補償的好處是,消費者不依賴於ZK,因此客戶只需要與簡化整體架構的代理交談即可。此外,對於有很多消費者的大型部署,ZK可能會成爲瓶頸,而Kafka可以輕鬆處理這種負載(承諾補償與撰寫主題相同,Kafka在這裏可以很好地擴展 - 事實上,默認情況下,__consumer_offsets是用50個分區IIRC創建)。

我不熟悉NodeJS或kafka節點 - 它取決於客戶端實現如何提交偏移量。

長話短說:如果您使用經紀人0.10.1.0您可以對主題__consumer_offsets提交補償。但它取決於你的客戶端,如果它實現了這個協議。

更詳細地說,它取決於您的經紀人和客戶端版本(以及您使用的是哪種消費者API),因爲較早的客戶端可以與較新的經紀人交談。首先,您需要擁有經紀人和客戶端版本0.9或更高版本才能將偏移量寫入卡夫卡主題。但是,如果較早的客戶端連接到0.9代理,它仍會將偏移量提交給ZK。

對於Java消費者:

這取決於什麼消費者使用:0.9前有兩個「老客戶」,即「高級用戶」和「低層次的消費」。兩者都直接向ZK提交補償。自0.9以來,兩個消費者都被合併爲單一消費者,稱爲「新消費者」(它基本上統一了兩個老消費者的低水平和高水平的API--這意味着,在0.9中有三種類型的消費者)。新消費者承諾抵消經紀人(即內部卡夫卡主題)

爲了使升級更容易,還可以使用舊消費者「雙重提交」補償(截止到0.9)。如果您通過dual.commit.enabled啓用此功能,則會將偏移量提交給ZK和__consumer_offsets主題。這允許您從舊消費者API切換到新的消費者API,同時將您從ZK的偏移移動到__consumer_offsets主題。

+0

Thx,我會確保升級到最新的API。 –

1

這一切取決於您使用的是哪一位消費者。您應該根據您的Kafka版本選擇合適的消費者。

版本0.8經紀人使用HighLevelConsumer。您的組的偏移量存儲在zookeeper中。

對於經紀人0.9及更高版本,您應該使用新的ConsumerGroup。補償與卡夫卡經紀人一起存儲。

請注意,HighLevelConsumer仍然可以在0.8版本以上使用,但它們已在0.10.1中棄用,支持很快就會消失。如果您承諾使用它,ConsumerGroup具有滾動遷移選項以幫助從HighLevelConsumer遷移。

相關問題