2017-07-05 45 views
1

我是卡夫卡的新手,我不太瞭解卡夫卡配置的含義,任何人都可以解釋爲我更容易理解!不明白卡夫卡的auto.offset.reset和enable.auto.commit的含義

這裏是我的代碼:

val kafkaParams = Map[String, Object](
    "bootstrap.servers" -> "master:9092,slave1:9092", 
    "key.deserializer" -> classOf[StringDeserializer], 
    "value.deserializer" -> classOf[StringDeserializer], 
    "group.id" -> "GROUP_2017", 
    "auto.offset.reset" -> "latest", //earliest or latest 
    "enable.auto.commit" -> (true: java.lang.Boolean) 
) 

這是什麼意思在我的代碼?

+0

我建議閱讀與您正在閱讀和/或寫入的Kafka版本相關的Kafka文檔:[Here](http://kafka.apache.org/documentation.html)是官方文檔。消費者和生產者配置部分有參數的定義。 – Jeremy

回答

0

我會向你的意思解釋,但我強烈建議閱讀Kafka Web Site Configuration

"bootstrap.servers" -> "master:9092,slave1:9092" 

本質上,卡夫卡的全套消費者配置參數羣集配置:IP和端口。

"key.deserializer" -> classOf[StringDeserializer] 
"value.deserializer" -> classOf[StringDeserializer] 

This SO答案解釋了什麼是目的。

"group.id" -> "GROUP_2017" 

消費者進程將屬於groupId。 groupId可以有多個使用者,Kafka只會將一個使用者進程分配給一個分區(用於數據消費)。如果消費者數量大於可用分區數量,則某些進程將空閒。

"enable.auto.commit" -> (true: java.lang.Boolean) 

閹這面旗幟是真的,那麼卡夫卡是能夠提交使用動物園管理員堅持過去的「偏移」,它讀取你從卡夫卡帶來的信息。如果您希望爲生產系統提供更強大的解決方案,則此方法不是最好的選擇,因爲不能確保您帶來的記錄得到正確處理(使用您在代碼中編寫的邏輯)。如果此標誌爲false,則Kafka將不知道哪個是最後一次偏移量讀取,因此當您重新啓動該過程時,它將根據下一個標誌(auto.offset)的值開始讀取'最早'或'最新'偏移量。重啓)。最後,This Cloudera article詳細解釋瞭如何以適當的方式管理偏移量。

"auto.offset.reset" -> "latest" 

這個標誌告訴Kafka在沒有任何'提交'的情況下從哪裏開始讀取偏移量。換言之,如果您尚未在Zookeeper中保留任何偏移(手動或使用enable.auto.commit標誌),它將從'最早'或'最新'開始。