KAFKA начальная загрузка из базы данных - PullRequest
0 голосов
/ 11 февраля 2020

Я начинаю играть с kafka, и у меня возникает много вопросов при импорте данных из базы данных.

Мой сценарий таков: у меня есть реляционная база данных с несколькими таблицами, и я хочу импортировать их в темы КАФКА. Беспорядок в моей голове: если я использую KAFKA connect для импорта всех этих таблиц, как мои потребители узнают, когда были загружены данные all ? Прежде чем мой потребитель начнет работать, мне нужно загрузить большую часть записей из разных таблиц в разделы kafka.

Например, в моей базе данных есть таблица Customer и Order. Я хочу импортировать эти 2 таблицы в Customer и Order topi c. Если мой потребитель запускается из-за нового заказа, но информация о нем еще не указана в разделе topi c, он не будет работать. Я слишком усложняю это?

Ответы [ 3 ]

2 голосов
/ 12 февраля 2020

Кафка обеспечивает поток событий в реальном времени. Число рейнольдса на ваш вопрос «как мои потребители узнают, когда все данные были загружены», - вы спрашиваете о завершении некоторой конечной операции (загрузка данных в Kafka?), но события происходят и продолжают происходить с течением времени. Ваше приложение Streams работает постоянно и продолжает работать - «конца» нет.

Ваше текущее мышление о данных в таблице стихов событий в Kafka Topi c звучит так, будто вы рассматриваете их как два эквивалентных понятия, но это не так.

1 голос
/ 12 февраля 2020

если я использую KAFKA connect для импорта всех этих таблиц, как мои потребители узнают, когда все данные будут загружены?

Как говорят другие ответы, они не вышли бы из коробка.

Вам необходимо будет контролировать процесс импорта вручную (или программно) или определить начальные условия «полноты», или, по крайней мере, в которых вы уверены в том, что начинаете потребителя.

Оттуда я бы предложил либо установить CD C, либо сделать так, чтобы клиенты и заказы сервисов писали напрямую на темы Кафки. Если вы пишете напрямую в Kafka, вам необходимо учитывать идемпотентные события, такие как заказ новых учетных записей клиентов, редактирование и удаление. Затем, если клиенты будут удалены, сохраните ли вы все заказы, связанные с этим клиентом, например?

Как только оба источника данных будут в темах, вы можете присоединиться к заказам клиентов вместе с KStreams / K SQL

это не будет работать

Возможно, вы захотите уточнить, что это такое, но потребитель по крайней мере из одного топи c будет работать нормально. Упомянутое выше объединение в конечном итоге будет согласованным во время импорта данных, но это компромисс, который у вас есть, поскольку в асинхронной обработке не используется транзакционная семантика атоми c

0 голосов
/ 12 февраля 2020

Технически : вам нужен механизм синхронизации для ваших производителей и потребителей. Kafka не предоставляет возможности информировать потребителей о том, что «topi c заполнен» (так как всегда может кто-то писать в topi c).

Производителям нужно каким-то образом (например, через другую топику Kafka). c?) Информировать потребителей о том, что «они закончили свою фазу». Только после того, как потребители получат эту информацию, они могут начать их обработку.

Дополнительный комментарий : Вы упомянули

If my consumer starts because there is a new Order but the information about the customer is not yet present in the Customer topic, it will not work

Как вы решаете эту проблему сейчас?

...