分佈式消息系統:Kafka(八)一些問題

8、問題

8.1 Zookeeper的作用,沒有Zookeeper的情況下使用Kafka?

  Zookeeper是一個開放源碼、高性能的協調服務。一旦Zookeeper停止工作,它就不能服務客戶端的請求。

  • Zookeeper主要用於在集羣中不同節點之間進行通信
  • 在Kafka中,它被用於提交偏移量,因此如果節點在任何情況下都失敗了,它都可以從之前提交的偏移量中獲取
  • 除此之外,它還執行其他活動,如: leader檢測、分佈式同步、配置管理、識別新節點何時離開或連接、集羣、節點實時狀態等等。

8.2 在數據製作過程中,你如何能從Kafka得到準確的信息?

  在數據中,爲了精確地獲得Kafka的消息,你必須遵循兩件事: 在數據消耗期間避免重複,在數據生產過程中避免重複

  這裏有兩種方法,可以在數據生成時準確地獲得一個語義:

  • 每個分區使用一個單獨的寫入器,每當你發現一個網絡錯誤,檢查該分區中的最後一條消息,以查看您的最後一次寫入是否成功
  • 在消息中包含一個主鍵(UUID或其他),並在用戶中進行反複製

8.3 在kafka中爲什麼幾乎不允許對消息進行“隨機讀寫”

  原因:每條消息在文件中的位置稱爲offset(偏移量),offset爲一個long型數字。kafka並沒有提供其他額外的索引機制來存儲offset。

  kafka和JMS(Java Message Service)實現(activeMQ)不同的是:即使消息被消費,消息仍然不會被立即刪除。日誌文件將會根據broker中的配置要求,保留一定的時間之後刪除;比如log文件保留2天,那麼兩天後,文件會被清除,無論其中的消息是否被消費.kafka通過這種簡單的手段,來釋放磁盤空間,以及減少消息消費之後對文件內容改動的磁盤IO開支.

  對於consumer而言,它需要保存消費消息的offset,對於offset的保存和使用,有consumer來控制;當consumer正常消費消息時,offset將會”線性”的向前驅動,即消息將依次順序被消費.事實上consumer可以使用任意順序消費消息,它只需要將offset重置爲任意值。

  partitions的設計目的有多個.最根本原因是kafka基於文件存儲.通過分區,可以將日誌內容分散到多個server上,來避免文件尺寸達到單機磁盤的上限,每個partiton都會被當前server(kafka實例)保存;可以將一個topic切分多任意多個partitions,來消息保存/消費的效率.此外越多的partitions意味着可以容納更多的consumer,有效提升併發消費的能力.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章