本文介紹了Kafka-Connect接收器任務忽略文件偏移量存儲屬性的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我在使用融合JDBC連接器時遇到了非常奇怪的行為。我非常肯定它與融合堆棧無關,而是與Kafka-Connect框架本身有關。
因此,我將offset.storage.file.filename
屬性定義為默認/tmp/connect.offsets
并運行我的接收器連接器。顯然,我希望連接器持久化給定文件中的偏移量(它不存在于文件系統中,但它應該是自動創建的,對嗎?)文檔顯示:
offset.storage.file.filename
要存儲連接器偏移量的文件。通過將偏移量存儲在磁盤上,可以在單個節點上停止和啟動獨立進程,并從以前停止的位置繼續。
但卡夫卡的行為方式完全不同。
-
它檢查給定文件是否存在。
如果不是,卡夫卡只是忽略它,并在卡夫卡主題中保留偏移量。
如果我手動創建給定文件,讀取仍會失敗(EOFException),并且偏移量將再次保留在Theme中。
這是一個錯誤嗎?或者更有可能的是,我不知道如何使用這種配置?我了解兩種保存偏移量的方法之間的差異,文件存儲更適合我的需要。
推薦答案
offset.storage.file.filename
僅用于源連接器。它用于在輸入數據源上放置書簽,并記住它停止讀取它的位置。創建的文件包含類似文件行號的內容(對于文件源)或表行號(對于一般的JDBC源或數據庫)。
在分布式模式下運行Kafka Connect時,此文件將替換為默認命名的Kafka主題connect-offsets
,應復制該主題以容錯故障。
就接收器連接器而言,無論使用哪種插件或模式(獨立/分布式),它們都會像任何Kafka消費者一樣,將上次停止閱讀輸入主題的位置存儲在名為__consumer_offsets
的內部主題中。這允許使用諸如kafka-consumer-groups.sh
命令行工具之類的傳統工具來確定接收器連接器的滯后程度。
Confluent Kafka replicator盡管是源連接器,但可能是個例外,因為它從遠程Kafka讀取并且可能使用Kafka使用者。
我同意文檔不清楚,無論連接器類型是什么(信源或信宿),此設置都是必需的,但它僅由信源連接器使用。此設計決策背后的原因是,單個Kafka Connect工作進程(我指的是單個JVM進程)可以運行多個連接器,可能既包括源連接器,也可能是宿連接器。換句話說,此設置是工作級別設置,而不是連接器設置。
這篇關于Kafka-Connect接收器任務忽略文件偏移量存儲屬性的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,