Если бы повторяющиеся сообщения пришли из topi c, разве у нас не было бы другой пары смещения раздела в записи метаданных?
Да, если вы создали дважды, сообщения будет иметь разные смещения.
Ровно один раз - это сложная вершина c, и реализация одноразового потребления требует c процесса, указанного в месте назначения. В этом блоге описаны два режима сбоя, которые необходимо обработать ровно один раз, чтобы они были успешно реализованы.
В частности:
- A - Запись в место назначения не удалась. В этом случае SnowflakeSink, коннектор kafka, должен сообщить kafka connect об ошибке записи в место назначения. Это сложнее, чем кажется.
- B - Применить kafka не удается. В этом случае SnowflakeSink получает запись, которую она уже обработала. Поэтому ему необходимо откатить транзакцию, чтобы строка не была вставлена со стороны снежинки, или, если, скажем, была включена автоматическая фиксация, ему необходимо проверить место назначения, чтобы убедиться, что запись еще не существует.
Я сделал лишь беглый обзор разъема, но на основе этого комментария Я думаю, что A обрабатывается в раковине.
Это можно было бы обработать в другом месте, но для обработки B я можно было бы ожидать, что переменная экземпляра processingOffset будет заполнена при запуске наивысшим смещением, найденным в месте назначения.
Обычно, даже если существуют гарантии, я думаю, что лучше спланировать дублирование. Как предлагает @MikeWalton, можно также создавать дубликаты на стороне производителя, а Snowflake предоставляет надежные инструменты для объединения таблиц.