#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).