[英]Kafka consumer synchronization behavior
我目前正在探索kafka作為一個簡單問題的初學者。
將有一個Producer將消息推送到一個主題,但是會有n個來自kafka的消費者按摩來自kafka的數據並插入到數據庫中(每個消費者插入到不同的表中)。
消費者是否有可能會失去同步(比如消費者的某些部分會停頓一段時間),那么一個或多個消費者將不會處理消息並插入表格?
假設代碼始終正確,則在按摩數據時不會出現異常。 每條消息只處理一次非常重要。
我的問題是Kafka是否為我們處理這部分內容,或者我們是否必須編寫其他代碼以確保不會發生這種情況。
您可以對使用者進行分組(請參閱group.id
配置),並且分組的使用者可以將主題的分區分開。 一旦消費者下降,該組中的另一個消費者將接管被刪除的分區讀取的分區。
但是,可能存在一些問題:當消費者讀取分區時,它會向Kafka提交偏移量,如果消費者在處理收到的數據之后但在提交偏移量之前丟失,則其他消費者將從最新的可用偏移開始讀取。 幸運的是,您可以管理如何提交偏移的策略(請參閱使用者的設置enable.auto.commit
, auto.offset.reset
等)
Kafka和Spark Streaming指南提供了一些解釋以及如何管理偏移的可能策略。
根據設計,Kafka將生產者與消費者分離。 消費者將盡可能快地閱讀 - 消費者可以盡可能快地生產。
消費者可以組織成“消費者群體”,您可以對其進行設置,以便多個消費者可以從單個群組中進行閱讀並進行設置,以便個人消費者從其自己的群組中進行閱讀。
如果您有1個消費者對1個組(取決於您的確認策略)應該能夠確保每個消息只讀一次(每個消費者)。
否則,如果您希望從單個組中讀取多個消費者 - 同樣的事情 - 但消息由n個消費者中的一個讀取一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.