Правильный способ добавить (отстающий) водяной знак к источнику, который уже имеет временные метки - PullRequest
0 голосов
/ 10 октября 2019

Прежде всего, я очень новичок в потоковой обработке, не стесняйтесь поправлять меня, если я неправильно понимаю концепции:)

Я использую Apache Fink. Мой источник - FlinkKafkaConsumer, который уже добавляет временные метки, которые он берет от Кафки. В своей обработке я хочу иметь возможность использовать водяной знак (почему вопрос выходит за рамки этого вопроса).

Что мне нужно, так это поведение генерации водяного знака, представленное абстрактным классом BoundedOutOfOrdernessTimestampExtractor.

Но этот класс предоставляет только: public abstract long extractTimestamp(T element);

, который, если вы переопределите его, даст вам элемент, но не отметку времени, изначально предоставленную FlinkKafkaConsumer

The *Интерфейс 1015 *, реализованный BoundedOutOfOrdernessTimestampExtractor, предоставляет public final long extractTimestamp(T element, long previousElementTimestamp), который дает вам ранее назначенное, и в этом случае вы можете просто использовать это повторно. Но этот метод окончательный в BoundedOutOfOrdernessTimestampExtractor, и поэтому его нельзя использовать.

Так что мой способ обойти это сейчас - скопировать / вставить исходный код BoundedOutOfOrdernessTimestampExtractor и переписать его виспользуйте previousElementTimestamp в качестве метки времени.

Мой вопрос: Действительно ли это лучший способ сделать это или есть (лучшая) альтернатива?

Я просто удивлен тем, что копирую классы вставки, я привык (испорчен) к фреймворкам, разработанным так, чтобы такая «базовая» функциональность могла быть реализована с учетом того, что включено. (Или, может, то, что я хочу, на самом деле очень эзотерично :) 1029 *

...