Последовательность нескольких тем ввода в сбросе Kafka Streams

Предположим, у меня есть приложение Kafka Streams, в котором есть две темы ввода: тема заказов и тема платежей. Платеж относится к конкретному заказу, и приложение будет что-то делать с объединенным заказом и оплатой.

Обычно, если мое приложение перезапускается, оно может возобновиться именно там, где остановилось, потому что у нас есть смещения тем и внутренние темы, зафиксированные в Kafka. Однако в некоторых случаях нам нужно начать обработку с самого начала. Например:

  • Сброс приложения, как описано в этом Запись в блоге Confluent
  • В мультикластере с настройкой MirrorMaker перемещение нашего приложения в резервный кластер Kafka, поскольку тема смещается не может быть реплицирован в резервный кластер в используемой нами версии MirrorMaker

Если мы читаем входные темы с самого начала и повторно обрабатываем, как мы можем гарантировать, что мы читаем входные темы в разумном порядке? Например, если мы сначала прочитаем все платежи, а затем заказы, у нас будут проблемы, потому что каждый раз, когда мы обрабатываем платеж, мы будем пропускать заказ.

В идеале мы хотели бы повторно обработать сообщения в обеих темах в том же порядке, в котором они пришли в первый раз. Я знаю, что это возможно, если бы мы использовали сохранение временной метки предлагается в Confluent Replicator, но у меня нет возможности использовать Replicator. (Кроме того, не уверен, что это актуально для случая простого сброса приложения).

Для целей этого примера приложения сохранение временного порядка строго не требуется — мы можем сделать что-то более простое, например прочитать все заказы, а затем все платежи. Возможно ли что-то подобное с Kafka Streams?


person Matt S    schedule 16.02.2021    source источник