JDBC Source ConnectorのDBセッションをどう切断するか
JDBC Source Connectorを利用してRDB上のデータをKafkaへ連携する仕組みにおいて、ソースとなるRDBをメンテナンス等で長時間停止する必要があり、その際にKafka Connect側ではどういうオペレーションが必要かを調査した際のメモ
JDBC Source Connectorには明示的にDBセッションをクローズするためのAPIが現時点では提供されていない
ConnectorにpauseのためのAPIがあるが、JDBC Sourceコネクターではテーブルのメタデータを取得するためのスレッドが別途存在しているようで、このスレッドから生成されるJDBCコネクションはConnectのpause/resume APIの管理外で実行されているために綺麗に全てのDBセッションをpause APIだけではクローズすることができない DB側からセッションを切断してもコネクター側で再度接続がされる
そのため、DBメンテナンスなどで長い時間DBが停止する際、DB停止後ConnectorをリトライアウトさせてConnectorとTaskをFailedさせて停止、DB再起動後にコネクタと各Taskをリスタートするというワークアラウンドが今の所手順が少ないアプローチかもしれない (リトライアウトした場合、DB復旧後にセッションの再作成は自動でされないため、明示的にリスタートが必要となる)
code:再起動のためのAPI
curl -XPOST kafka-connect-server:8083/connectors/some-db-source-connector/restart?includeTasks=true&onlyFailed=true
※以前までは各Task毎にIDを指定してrestartが必要だったが、Connector単位でTaskをrestartできるパラメーターが追加されてた
なお、エラーはコネクターのstatus APIから確認ができ、traceという項目にエラーメッセージが出力されるので意図したエラーでFiledとなっているのかを確認することもできる