Ошибка kafka-connect: невозможно получить действительный слот репликации - PullRequest
0 голосов
/ 07 января 2020

Разъем Kafka debezium- postgres в моем приложении выдает эту ошибку:

org.apache.kafka.connect.errors.ConnectException: Unable to obtain valid replication slot. Make sure there are no long-running transactions running in parallel as they may hinder the allocation of the replication slot when starting this connector
    at io.debezium.connector.postgresql.connection.PostgresConnection.readReplicationSlotInfo(PostgresConnection.java:226)
    at io.debezium.connector.postgresql.connection.PostgresConnection.getReplicationSlotState(PostgresConnection.java:150)
    at io.debezium.connector.postgresql.PostgresConnectorTask.start(PostgresConnectorTask.java:98)
    at io.debezium.connector.common.BaseSourceTask.start(BaseSourceTask.java:49)
    at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:198)
    at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:175)
    at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:219)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

Приложение использует postgresql версия 9.6.11, значение max_replication_slots равно 10. Я могу см. активный логический replication_slot в базе данных с подтвержденным_flush_lsn = null, restart_lsn = 3/93043310, catalog_xmin = 202656, active = t, datoid = 16407, slot_type = логический, active_pid = 32183, плагин = wal2 json, slot_name = slot1, database = db1 (я заменил имя слота и имена db на фиктивные значения)
В соответствии с моим пониманием, так как Verified_flush_lsn = null для слота логической репликации здесь вызывает эту ошибку, поскольку не позволяет соединителю найти этот слот.

Как я могу это исправить и почему значение подтверждается_flush_lsn будет нулевым?

1 Ответ

0 голосов
/ 08 января 2020

Я исправил это путем перезагрузки экземпляра rds DB в aws, который был передан соединителем. После этого значение Verified_flush_lsn было сброшено в ненулевое значение, несколько похожее на (restart_lsn = 3/93043310). Kafka-Connect смог найти слот replication_slot "slot1", как и ожидалось. Разъемы также были вверх. Это временно решило мою проблему, но все же я хотел бы понять, какой набор подтвержденный логический replication_slot изначально подтвержден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...