簡體   English   中英

為什么Kafka分布式連接器在我創建它的節點被殺死時死亡?

[英]Why is the Kafka distributed connector dying when the node I created it on is killed?

我在分布式模式下在本地“啟動”Docker容器中啟動Kafka連接器(與Kafka節點容器分開)。 連接器按預期工作,但是當我殺死啟動容器時,連接器停止工作。 我希望它繼續工作,因為我相信它是在另一個容器中的Kafka節點上的一個工作者上注冊和運行的。 我的設置更詳細如下:

目前我在本地通過Docker容器運行所有內容。 我有:

  1. Zookeeper節點(3.4.9)
  2. Kafka節點(Apache,0.10.1.0)
  3. 一個'發射'節點。

啟動節點下載相應的Kafka版本並解壓縮其內容。 然后構建連接器源,設置類路徑以包含必要的JAR,然后執行連接器:

connect-distributed.sh config/connect-distributed.properties

分布式屬性文件設置組ID,各種主題名稱,模式和轉換器以及引導服務器(指向上面的Kafka節點(2))。

此命令似乎正確執行,並且成功啟動了restful連接器http服務。 然后,我可以向http:// example:8083 / connectors發出POST請求,為連接器任務提供配置。 該命令完成且沒有錯誤,並且連接器已成功啟動。 我可以從Kafka節點(2)中的主題消費,我看到輸出,指示連接器正在工作並通過發送數據。

當我殺死啟動節點(3)時,我希望連接器繼續運行,因為我在Kafka集群中注冊了它,盡管它是一個集群。 連接器不會繼續運行,並且似乎與啟動節點一起死亡。 群集中的工作人員現在不應該管理連接器嗎? 我是否需要更改啟動連接器的方式或者我是否誤解了某些內容?

Kafka連接器不在Kafka代理上執行。 它們在“Kafka Connect Worker”進程中執行,這就是你的問題所謂的“啟動'節點”。 這些進程接受對連接器的REST請求,並在工作進程中運行連接器。 在幕后,這些流程只是通過普通的生產者和消費者與Kafka經紀人進行交互。 Kafka Connect在這些客戶端之上提供了一個框架,可以輕松構建可擴展的連接器,因此連接器開發人員只需關注如何將數據拉或推送到連接器所針對的系統。 這意味着只有在至少一個工作進程仍處於活動狀態時才繼續處理。

有兩種類型的工作進程。 在獨立模式下,連接器配置不會在任何地方保留 - 您通常通過命令行傳遞它。 在本地文件系統上維護偏移信息(即您已經復制的數據)。 因此,在此模式下,如果在可訪問同一文件系統的同一節點上重新啟動進程,則只能假設您將從中斷處繼續。

在分布式模式下,工作人員協調分配工作,並且他們共享連接器配置,偏移等的公共持久存儲(在Kafka中)。這意味着如果啟動一個實例並創建連接器,則關閉該實例將停止一切工作。 但是,當您再次啟動實例時,它將從中斷處繼續,而不重新提交連接器配置,因為該信息已持久保存到Kafka。 如果啟動多個實例,它們將協調以平衡它們之間的任務,如果一個實例失敗(由於崩潰,彈性縮小正在運行的實例數,電源故障等),其余實例將重新分配自動工作。

您可以在Confluent的Kafka Connect文檔中找到有關工作人員,不同類型以及故障轉移如何在分布式模式下工作的更多詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM