Apache Beam, KafkaIO хотя бы один раз семантика

#apache-kafka #kafka-consumer-api #apache-beam #apache-beam-kafkaio

#apache-kafka #kafka-consumer-api #apache-beam #apache-beam-kafkaio

Вопрос:

Мы внедряем пилотную версию, которая считывает данные из Kafka и записывает в BigQuery.

Простой конвейер:

  • KafkaIO.read
  • BigQueryIO.write

Мы отключили автоматическую фиксацию. И мы используем commitOffsetsInFinalize()

Может ли эта настройка гарантировать, что сообщение появится хотя бы один раз в BigQuery и не будет потеряно, при условии, что на стороне BigQueryIO все в порядке?

В документации для commitOffsetsInFinalize() я встретил следующее:

Это помогает минимизировать пробелы или дублировать обработку записей при перезапуске конвейера с нуля

Мне любопытно, о каких «пробелах» здесь идет речь?

Если вы рассматриваете крайние случаи, есть ли вероятность того, что сообщения будут пропущены и не доставлены в BQ?

Ответ №1:

Фиксация смещения для Apache Kafka означает, что если бы вы перезапустили свой конвейер, он начался бы с позиции в потоке перед перезапуском. Поток данных гарантирует, что данные не будут удалены при записи в BigQuery. Но при использовании распределенной системы всегда существует вероятность того, что что-то пойдет не так (например, сбой GCP).