Debezium исходящие картины |это схема исправлена ​​с SMT / исходящие таблицы, если мы используем debezium - PullRequest
0 голосов
/ 07 октября 2019

Дебезиум с шаблоном исходящих сообщений

Установка контекста:

  1. Использование
  2. Мы хотели использовать реестр схем для хранения всех схем событий для различных бизнес-объектов
  3. В одной теме может быть несколько версий одной и той же схемы
  4. В одной теме может быть совершенно другая схема, ограниченная бизнес-контекстом. Ex customerCreated, customerPhoneUpdated, customerAddressUpdated. (Используя одно имя субъекта strtegies)
  5. Требуется проверить, поддерживает ли debezium пункты 2 и 3 (особенно 3).

Представьте, у меня есть два бизнес-события customerCreated и orderCreated и яхотел сохранить их в одной теме «com.business.event».

customerCreated

{«id»: «244444» «name»: «test», «address»: «test123 »,« электронная почта »:« test@test.com »}

orderCreated

{« id »:« 244444 »« value »:« 1234 »,« address »:« test123 »,« телефон »:« 3333 »,« дата доставки »:« 10-12-19 »}

Структура моей таблицы исходящих сообщений соответствует следующей статье

https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/

Колонка |Тип |Модификаторы -------------- + ------------------------ + ---------- идентификатор |UUID |не нулевой агрегатный тип |изменение характера (255) |не нулевой агрегатид |изменение характера (255) |не нулевой тип |изменение характера (255) |не нулевая полезная нагрузка |JSONB |not null

Теперь, когда я помещаю свое бизнес-событие в таблицу выше, оно будет сохранять события customerCreated и orderCreated в столбце полезной нагрузки в виде String / JSON. Если я отправлю это на kafka в теме «com.business.event» с использованием коннектора debezium, то появится следующее сообщение. (Печать со схемой, например)

customerCreated.json

{ "schema": { "type":"struct", "fields":[ { "type":"string", "optional":false, "field":"eventType" }, { "type":"string", "optional":false, "name":"io.debezium.data.Json", "version":1, "field":"payload" } ], "optional":false }, "payload": { "eventType":"Customer Created", "payload":"{\"id\": \"2971baea-e5a0-46cb-b1b1-273eaf88246a\", \"name\": \"jitender\", \"email\": \"test\", \"address\": \"700 \"}}" } }

orderCreated.json

{
"schema":
    {
        "type":"struct",
        "fields":[
            {
                "type":"string",
                "optional":false,
                "field":"eventType"
            },
            {
                "type":"string",
                "optional":false,
                "name":"io.debezium.data.Json",
                "version":1,
                "field":"payload"
            }
        ],
        "optional":false
    },
"payload":
    {
        "eventType":"Order Created",
        "payload":"{\"id\": \"2971baea-e5a0-46cb-b1b1-273eaf88246a\", \"value\": \"123\",\"deliverydate\": \"10-12-19\",  \"address\": \"test\", \"phone\": \"700 \"}}"
    }

}

Проблема:

Как видно из приведенных выше примеров, схема в реестре схем / kafka остается неизменной, хотя полезная нагрузка содержит различные бизнес-объекты. Теперь, когда я, как потребитель, иду и пытаюсь десериализовать это сообщение, я должен знать, что полезная нагрузка может содержать различную структуру в зависимости от бизнес-события, из которого они сгенерированы. В этом сценарии я не могу в полной мере использовать реестр схем, поскольку потребитель должен заранее знать все бизнес-объекты.

Вопросы:

  1. Что я хотел сделать, так это то, что дебезиум долженсоздайте две разные схемы под одной и той же темой «com.business.event», используя стратегию имени субъекта (пример ниже). https://karengryg.io/2018/08/18/multi-schemas-in-one-kafka-topic/

Теперь, когда я потребляю сообщение, мой потребитель прочитает идентификатор схемы из сообщения темы и получит его из реестра схемы и расшифрует сообщение непосредственно вместе с ним. После декодирования я могу игнорировать сообщение, если меня не интересует деловое мероприятие. Делая это, я могу иметь разные схемы в той же теме, используя реестр схемы.

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

1 Ответ

1 голос
/ 09 октября 2019

, пожалуйста, взгляните на https://issues.jboss.org/browse/DBZ-1297 Это, вероятно, решение вашей проблемы и вопросов, поскольку оно направлено на то, чтобы разматывать непрозрачную строку в Kafka Connect. В этом случае у вас будет открытая схема.

Было бы хорошо, если бы вы могли попробовать ее для схемы для стратегии с именем субъекта.

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