Используйте ссылку debezium postgresql 11 Не удалось получить кодировку для теста базы данных

Я использую debezium cdc connect pg, и я создаю pg 11 для использования докером , pg работает хорошо. когда я использую debezium в коннекторе kafka , он сообщает :

Не удалось получить кодировку для теста базы данных

завиток:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST http://localhost:8083/connectors/ -d '{
    "name": "debezium",
    "config": {
        "name": "debezium",
        "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
        "tasks.max": "1",
        "database.hostname": "localhost",
        "database.port": "5432",
        "database.dbname": "test",
        "database.user": "pg",
        "database.password": "135790",
        "database.server.name": "ls",
        "table.whitelist": "public.test",
        "plugin.name": "pgoutput"
    }
}'

исключение кафки:

[2020-07-08 09:24:35,076] ERROR Uncaught exception in REST call to /connectors/ (org.apache.kafka.connect.runtime.rest.errors.ConnectExceptionMapper:61)
java.lang.RuntimeException: Couldn't obtain encoding for database test
    at io.debezium.connector.postgresql.connection.PostgresConnection.determineDatabaseCharset(PostgresConnection.java:434)
    at io.debezium.connector.postgresql.connection.PostgresConnection.<init>(PostgresConnection.java:77)
    at io.debezium.connector.postgresql.connection.PostgresConnection.<init>(PostgresConnection.java:87)
    at io.debezium.connector.postgresql.PostgresConnector.validate(PostgresConnector.java:102)
    at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:277)
    at org.apache.kafka.connect.runtime.distributed.DistributedHerder$6.call(DistributedHerder.java:534)
    at org.apache.kafka.connect.runtime.distributed.DistributedHerder$6.call(DistributedHerder.java:531)
    at org.apache.kafka.connect.runtime.distributed.DistributedHerder.tick(DistributedHerder.java:267)
    at org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:216)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.postgresql.util.PSQLException: FATAL: database "test" does not exist
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2532)
    at org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2644)
    at org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:137)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:255)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:217)
    at org.postgresql.Driver.makeConnection(Driver.java:458)
    at org.postgresql.Driver.connect(Driver.java:260)
    at io.debezium.jdbc.JdbcConnection.lambda$patternBasedFactory$1(JdbcConnection.java:190)
    at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:788)
    at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:783)
    at io.debezium.connector.postgresql.connection.PostgresConnection.determineDatabaseCharset(PostgresConnection.java:431)
    ... 13 more
[2020-07-08 09:24:35,128] INFO 127.0.0.1 - - [08/Jul/2020:01:24:34 +0000] "POST /connectors/ HTTP/1.1" 500 73  330 (org.apache.kafka.connect.runtime.rest.RestServer:60)

person chen amos    schedule 08.07.2020    source источник


Ответы (3)


мне кажется, что база данных с именем test либо не существует, либо не видна пользователю pg.

person Jiri Pechanec    schedule 08.07.2020
comment
pg = # \ dt Список отношений Схема | Имя | Тип | Владелец -------- + ------ + ------- + ------- общедоступный | тест | стол | pg (1 строка) в базе данных имеет таблицу, я думаю, это другой вопрос - person chen amos; 08.07.2020
comment
Это таблица, а не база данных. Если база данных называется pg, тогда database.dbname следует установить в pg - person Jiri Pechanec; 08.07.2020
comment
я понимаю это думает - person chen amos; 09.07.2020

Пара вещей, которые неточны в вашей полезной нагрузке. Оставьте разрешаемое имя вместо localhost. Во-вторых, разместите правильное пространство имен db.

        "database.hostname": "FQDN",
        "database.server.name": "test_table_name",

Это может быть случай, когда хост PostgreSQL не подтвердил аутентификацию с pg пользователем. Он должен иметь запись в pg_hba.conf (на сервере PostgreSQL) и устанавливать доверие / авторизацию с клиентской машины, то есть Kafka-коннектор.

# host       DATABASE  USER  ADDRESS                       METHOD  [OPTIONS]
# hostssl    DATABASE  USER  ADDRESS                       METHOD  [OPTIONS]
host         test      pg    Kafka.connector.server.ip/32  md5
hostssl      test      pg    Kafka.connector.server.ip/32  md5

Затем перезапустите сервер PostgreSQL, чтобы получить действующую авторизацию для пользователя pg, в моем случае pg_ctl reload.

Поскольку завиток происходит как вызов REST API, добавьте порты Kafka-rest (8082) и Kafka-connect-rest (8083) в настройки брандмауэра сервера PostgreSQL.

person nsSniper    schedule 13.11.2020

Да, сообщение вводит в заблуждение иначе. В моем случае проблема заключалась в закрытых портах между kafka-connect и сервером базы данных.

person bkomac    schedule 05.01.2021