【トラブル】【Kafka】ローカル環境のKafkaでのトラブル

■ はじめに

ローカル環境のKafkaではまったトラブルについて
メモっておく

目次

【0】今回の教訓
【1】エラー「DataException: JsonConverter with schemas.enable requires」が発生する
【2】エラー「SQLException: No suitable driver found for ...」が発生する
【3】エラー「ConnectException: Unable to initialize REST server」が発生

【0】今回の教訓

a) Kafka に原因があると分かった場合、以下を確認する

[1] 設定ファイル
[2] 使用しているライブラリ(ドライバなど)

Dockerとか連携して使ってたら一旦落として再度立ち上げて試す

* あんま関係ないかもしれないが、Topicなど残っていたので、、、
~~~~
# 一旦落とす
sudo docker compose down -v
# 立ち上げる
sudo docker compose up -d
~~~~

【1】エラー「DataException: JsonConverter with schemas.enable requires」が発生する

ローカル環境のKafkaからSnowflakeに接続する際に
以下のエラー内容が表示されて、Snowflakeのデータが更新されない

なお、エラー内容をヒントに以下のサイトの

https://github.com/confluentinc/kafka-connect-jdbc/issues/574

以下を設定ファイルに追加してもエラーが消えなかった。
~~~~~
key.converter.schemas.enable=false
value.converter.schemas.enable=false
~~~~~

1)エラー内容

org.apache.kafka.connect.errors.DataException: JsonConverter with schemas.enable requires "schema" and "payload" fields and may not contain additional fields. If you are trying to deserialize plain JSON data, set schemas.enable=false in your converter configuration.
        at org.apache.kafka.connect.json.JsonConverter.toConnectData(JsonConverter.java:308)

2)原因

*  kafka/config配下の設定ファイルにミスがあった
~~~~~~~
key.converter[ゴミ]=org.apache.kafka.connect.storage.StringConverter
~~~~~~~

3)解決案

* 設定ファイルを正しく修正

修正後

# key.converter[ゴミ]=org.apache.kafka.connect.storage.StringConverter のゴミ部分を削除
key.converter=org.apache.kafka.connect.storage.StringConverter

【2】エラー「SQLException: No suitable driver found for ...」が発生する

ローカル環境のKafkaからSnowflakeに接続する際に
以下のエラー内容が表示されて、Snowflakeのデータが更新されない

1)エラー内容

Cause by] java.sql.SQLException: No suitable driver found for jdbc:snowflake://My_Environment.snowflakecomputing.com...
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)

2)原因

* ドライバが kafka/libs配下になかった

3)解決案

* 以下の手順で対応した

[1] 対象DBのドライバをダウンロードする
 (今回の場合、以下のサイトから「snowflake-jdbc-3.13.28.jar」をダウンロード)

Snowflake-jdbcの場合
https://repo1.maven.org/maven2/net/snowflake/snowflake-jdbc/

[2] ローカル上のkafka/libs配下にドライバを配置する

【3】エラー「ConnectException: Unable to initialize REST server」が発生

* Kafka connectを起動した際に以下のエラー

エラー内容

ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectStandalone:130)
org.apache.kafka.connect.errors.ConnectException: Unable to initialize REST server
    at org.apache.kafka.connect.runtime.rest.RestServer.initializeServer(RestServer.java:216)
    at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:87)
Caused by: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8083
    at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:349)
    at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:310)
    at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
    at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:234)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
    at org.eclipse.jetty.server.Server.doStart(Server.java:401)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
    at org.apache.kafka.connect.runtime.rest.RestServer.initializeServer(RestServer.java:214)
    ... 1 more
Caused by: java.net.BindException: Address already in use
    at java.base/sun.nio.ch.Net.bind0(Native Method)
    at java.base/sun.nio.ch.Net.bind(Net.java:459)
    at java.base/sun.nio.ch.Net.bind(Net.java:448)
    at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
    at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
    at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
    ... 8 more

原因

* Port: 8083 を使用しているから

解決案

https://qiita.com/growsic/items/5c1626f60b5e5538d2b3

# lsof -i :<Port>
lsof -i :8083
java    27731 user  105u  IPv6 165447      0t0  TCP *:8083 (LISTEN)

# kill -9 <PID>
kill -9 27731

関連記事

Apache Kafka ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/04/26/103421
Apache Kafka ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/01/000000
Apache Kafka ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/23/235534
Apache Kafka ~ 環境構築 / Docker compose編 ~
https://dk521123.hatenablog.com/entry/2023/04/24/153846