2016-04-10 189 views
4

以下是我的使用情況的應用程序在不同的主題在排隊卡夫卡消息卡夫卡和阿卡集羣

  1. 一羣。
  2. 將每個主題的用戶分配給集羣中的工作者。這項工作可以分爲長時間運行,記憶密集型,簡單等,並且相應地選擇工人。

這讓我探索Akka集羣的工作分配,路由和縮放。我可以使用Akka「Supervisor」作爲Kafka消費者,並根據分類將相關工作分配給相應的工作人員。

但我仍然試圖瞭解的是在Akka集羣中實施主管和工作人員之間靈活的通信方式的正確方法。因爲一旦主管消費來自卡夫卡的消息,就會承諾卡夫卡抵消。如果在偏移提交之後的處理中發生某些錯誤,是否有以下可接受的方法來恢復並從最後一次離開的位置開始?

通過使用由Kafka支持的持久郵箱使主管成爲持續的主角。主管在卡夫卡排隊工作,工人從卡夫卡獲得工作,並在完成工作後才提交補償。

+1

嗨,你用什麼庫來從卡夫卡消費?您使用的庫可能具有在使用後不自動提交消息的功能。 –

回答

1

正如Jaakko所說,它確實取決於您使用的第三方庫。

就我而言,我已經成功地使用了Akka Streams Kafka,但我確實啓用了偏移自動提交。

但是,該庫可能會滿足您的需求,因爲它允許您自定義偏移提交(請參見章節External Offset StorageOffset Storage in Kafka)。

文檔說:

的Consumer.committableSource能夠抵消承諾持倉卡夫卡。與自動提交相比,這可以精確控制消息何時被視爲消耗。

爲了禁用自動提交,你必須通過添加akka.kafka.consumer部分來完成你的阿卡application.conf文件:

akka.kafka.consumer { 

    # Properties defined by org.apache.kafka.clients.consumer.ConsumerConfig 
    # can be defined in this configuration section. 

    kafka-clients { 
    # Disable auto-commit by default 
    enable.auto.commit = false 
    } 

} 

最新版本的akka-stream-kafka_2.110.16版)是阿卡2.5.x但兼容必須用Akka工具包中的一個覆蓋akka-stream_2.11依賴關係。目前,我正在使用Akka 2.5.3這個庫,它工作得很好。

希望你會找到你正在尋找的東西:)