Debezium Postgres Kafka Соединитель сердцебиения не передает LSN - PullRequest
0 голосов
/ 19 марта 2020

У меня Postgres Db на AWS RDS и разъем подключения kafka (Debezium Postgres), слушающий на столе. Конфигурация соединителя:

{
  "name": "my-connector",
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "database.dbname": "my_db",
    "database.user": "my_user",
    "max.queue.size": "32000",
    "slot.name": "my_slot",
    "tasks.max": "1",
    "publication.name": "my_publication",
    "database.server.name": "postgres",
    "heartbeat.interval.ms": "1000",
    "database.port": "my_port",
    "include.schema.changes": "false",
    "plugin.name": "pgoutput",
    "table.whitelist": "public.my_table",
    "tombstones.on.delete": "false",
    "database.hostname": "my_host",
    "database.password": "my_password",
    "name": "my-connector",
    "max.batch.size": "10000",
    "database.whitelist": "my_db",
    "snapshot.mode": "never"
  },
  "tasks": [
    {
      "connector": "my-connector",
      "task": 0
    }
  ],
  "type": "source"
}

Таблица обновляется не так часто, как другие таблицы, что первоначально приводило к задержке репликации следующим образом:

SELECT slot_name,
  pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) as replicationSlotLag,
  pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) as confirmedLag,
  active
FROM pg_replication_slots;
           slot_name           | replicationslotlag | confirmedlag | active
-------------------------------+--------------------+--------------+--------
 my_slot                       | 1664 MB            | 1664 MB      | t

Это будет настолько большим, что это будет угрожать использованием всего дискового пространства.

Я добавил пульс, и если я войду в брокер kafka и настрою консольного потребителя следующим образом: ./kafka-console-consumer.sh --bootstrap-server my.broker.address:9092 --topic __debezium-heartbeat.postgres --from-beginning --consumer.config=/etc/kafka/consumer.properties Это выгрузит все сообщения пульса, и затем показывайте новый каждые 1000 мс.

Тем не менее, размер слотов все еще увеличивается и растет. Если я делаю что-то вроде вставки фиктивной записи в таблицу, она устанавливает в слоте небольшую задержку, и это работает.

Хотя я бы хотел сделать это с сердцебиением. Я не хочу вставлять периодические c сообщения, так как кажется, что это добавит сложности. Почему сердцебиение не уменьшает размер слота?

1 Ответ

1 голос
/ 23 марта 2020

пожалуйста, взгляните на https://debezium.io/documentation/reference/1.0/connectors/postgresql.html#wal -disk-space

Вам действительно нужно отправить сообщения periodi c, но сейчас есть помощь - https://issues.redhat.com/browse/DBZ-1815

...