目前使用 UI 的方式測試 jdbc source connector,在啟動 connector 時會收到以下的 exception:
[2020-03-17 04:13:08,191] ERROR WorkerConnector{id=0286dac6b-ssssss} Error while starting connector (org.apache.kafka.connect.runtime.WorkerConnector:118)
java.sql.SQLException: No suitable driver found for jdbc:mysql://10.4.3.1:3306/db
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at oharastream.ohara.client.database.DatabaseClient$Builder$$anon$1.<init>(DatabaseClient.scala:95)
at oharastream.ohara.client.database.DatabaseClient$Builder.build(DatabaseClient.scala:83)
at oharastream.ohara.connector.jdbc.source.DBTableDataProvider.<init>(DBTableDataProvider.scala:39)
at oharastream.ohara.connector.jdbc.source.JDBCSourceConnector.run(JDBCSourceConnector.scala:46)
at oharastream.ohara.kafka.connector.RowSourceConnector.start(RowSourceConnector.java:115)
at org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:110)
at org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:135)
at org.apache.kafka.connect.runtime.WorkerConnector.transitionTo(WorkerConnector.java:195)
at org.apache.kafka.connect.runtime.Worker.startConnector(Worker.java:257)
這個 exception 看起來是載入不到 mysql 的 jdbc driver,後來我這邊測試使用以下的 worker API 來建立 worker:
{
"name": "wk01",
"brokerClusterKey": {
"group": "default",
"name": "bk"
},
"nodeNames": [
"10.100.0.138"
],
"sharedJarKeys": [
{
"name": "mysql-connector-java-8.0.19.jar",
"url": "http://10.100.0.138:5000/v0/downloadFiles/default/mysql-connector-java-8.0.19.jar",
"tags": {},
"classInfos": [],
"group": "default"
}
]
}
JDBC Source Connector 有成功的載入到 mysql 的 jdbc driver, 因此想確認前端在建立 worker 時,如果有用到第三方 jar 的部份時是使用 sharedJarKeys 還是 pluginKeys?
sharedJarKeys 會把 jar 檔 download 到 worker container 的 /home/ohara/default/libs 資料夾路徑
pluginKeys 會把 jar 檔 download 到 worker container 的 /home/ohara/default/plugins
因此第三方 jar 檔應該會使用 sharedJarKeys,客製化的 connector 會使用 pluginKeys
我們要如何區分Jar要上傳到sharedJarKeys還是pluginKeys?
我們要如何區分Jar要上傳到sharedJarKeys還是pluginKeys?
讓使用者自己去選 我們給足夠的說明就好
這是dependencies管理,不是我們能亂猜的,應該是使用者自己要決定
這個問題會牽涉到 UI 流程的修改,因此在 0.9 版使用簡單的方式來解決,就是直接寫個說明,如果要使用官方的 jdbc source connector 需要重新打包把 jdbc source connector 和 database driver 的 jar 檔包在一起才可以使用,希望在 0.10 的版本能做 UI 的調整,不然使用 jdbc source connector 會很不方便。
另外我在想,使用 stream 如果有使用第三方的 jar 檔,如果沒有打包在一起也應該會遇到相同的問題,因此我覺得這個問題的優先權可以放前面一點
另外我在想,使用 stream 如果有使用第三方的 jar 檔,如果沒有打包在一起也應該會遇到相同的問題,因此我覺得這個問題的優先權可以放前面一點
這個我之前在會議上提出來討論過,當時我提說要讓stream能接受"多個"jars,不過大家的結論是要保持現在的樣子就是只支援"單一"的jar
如果我們現在有一個強力的例子,或許可以再討論一次是否要讓stream支援多個jars
不過現在壓成uber jar應該不是一件很難的事情,要求使用者去壓uber jar是個可以接受的事情
FYI @vitojeng
或許可以再討論一次是否要讓stream支援多個jars
目前安排的考慮因素還是在 priority, 在可以用 uber jar 這個暫解的情形下, 這個工作的 priority 相對會比較低. 不過我想可以找時間討論, 看何時安排 wireframe 設計, 再另外視 priority 來安排實作.
補充一下一個重點:
因為我們官方的jdbc connector預期上是讓使用者"不用"改任何程式碼就能使用,因此現在UI限制導致使用者必須去壓uber jar是不太合理的事情,就這一點或許我們可以把priority稍微往上調一點
因為我們官方的jdbc connector預期上是讓使用者"不用"改任何程式碼就能使用,因此現在UI限制導致使用者必須去壓uber jar是不太合理的事情,就這一點或許我們可以把priority稍微往上調一點
+1
補充一下, 我先前說 priority 較低的想法是針對 "是否要讓stream支援多個jars"的部份. 而我們先前也尚未規劃要進行這部份.
對於 connector, 贊成 @chia7712 的想法. 這是我們原本就應該要做到的部份. 是我對這個 issue 誤解了.
+1
Support third party jar upload for the JDBC source connector