Flink RichSinkFunction конструктор VS open () - PullRequest
1 голос
/ 21 апреля 2020

Допустим, мне нужно реализовать пользовательский приемник, используя RichSinkFunction, и мне нужны некоторые переменные, такие как DBConnection в приемнике. Где я должен инициализировать DBConnection? Я вижу, что большинство статей посвящают DBConnection в методе open (), а не в конструкторе?

Следующие вопросы касаются того, какие переменные должны быть вставлены в конструктор и что должно быть init в open ()?

1 Ответ

1 голос
/ 21 апреля 2020

Конструктор RichFunction вызывается только на стороне клиента. Если что-то должно быть фактически выполнено в кластере, это должно быть сделано в open.

open также необходимо использовать, если вы хотите получить доступ к параметрам для вашего задания Flink или RuntimeContext (для состояние, счетчики и др. c.). Когда вы используете open, вы также хотите использовать close в симметричном c режиме.

Итак, чтобы ответить на ваш вопрос: ваш DBConnection должен быть инициализирован только в open. В конструкторе вы обычно просто сохраняете параметры константы задания в полях, например, как получить доступ к ключу ваших записей, если ваш приемник может быть повторно использован в нескольких проектах с различными структурами данных.

...