Если вы используете Kafka Streams API (или другой инструмент, поддерживающий однократную обработку с помощью Kafka), то семантика (EOS) Kafka распространяется на все приложения:
topic A --> App 1 --> topic B --> App 2 --> topic C
В вашем случае использования один вопрос заключается в том, поддерживает ли начальный этап CDC EOS. Другими словами, вы должны задать вопрос: какие шаги включены, и все ли шаги покрываются EOS?
В следующем примере EOS поддерживается сквозной, если (и только если) начальный шаг CDC также поддерживает EOS, как и остальная часть потока данных.
SQL --CDC--> topic A --> App 1 --> topic B --> App 2 --> topic C
Если вы используете Kafka Connect для этапа CDC, вы должны проверить, поддерживает ли используемый вами разъем EOS, да или нет.
Все, что я читаю, и каждый найденный мной пример транзакционного API указывает на «потоковую передачу».
Транзакционный API производителей / потребителей Kafka предоставляет примитивы для обработки EOS. Kafka Streams, который расположен поверх клиентов производителя / потребителя, использует эту функциональность для реализации EOS таким образом, чтобы его можно было легко использовать разработчикам с несколькими строками кода (например, автоматически позаботиться об управлении состоянием, когда требуется приложение). выполнить операцию с состоянием, такую как объединение или объединение). Возможно, эта связь между производителем / потребителем <-> Kafka Streams была вашей путаницей после прочтения документации?
Конечно, вы также можете «создавать свои собственные», используя базовых производителей и клиентов-клиентов Kafka (с транзакционными API) при разработке ваших приложений, но это больше работы.
Я изо всех сил пытаюсь осмыслить, как мы можем использовать точно один раз с нашей темой Kafka, или если точно один раз Kafka создан даже для не «потоковых» сценариев использования. Придется ли нам строить собственную дедупликацию и отказоустойчивость?
Не уверен, что вы подразумеваете под "не потоковыми" вариантами использования. Если вы имеете в виду: «Если мы не хотим использовать Kafka Streams или KSQL (или другой существующий инструмент, который может читать из Kafka для обработки данных), что нам нужно для достижения EOS в наших приложениях?», Тогда ответ будет следующим: «Да, в этом случае вы должны напрямую использовать производителя / клиентов Kafka и убедиться, что все, что вы делаете с ними, правильно реализует обработку EOS». (И поскольку последнее сложно, эта функциональность EOS была добавлена в Kafka Streams.)
Надеюсь, это поможет.