Сегодня я хотел бы обратиться к концептуальной теме c о Флинке, а не к технической.
В нашем случае у нас есть две темы Кафки A и B, которые необходимо объединить , Объединение должно всегда включать все элементов из topi c A, а также все новые элементы из topi c B. Для этого есть 2 возможности: всегда создавать новый Потребитель и начать потребление topi c A с самого начала, или сохранить все элементы из topi c A в состоянии, когда они потреблены. В настоящее время технологический подход заключается в объединении двух DataStreams, что быстро показывает нам его ограничения для этого варианта использования, поскольку нет возможности объединить потоки без окна (достаточно справедливо). Элементы из topi c A в конечном итоге будут потеряны, если окно перейдет, и у меня появилось ощущение, что пользователь постоянно сбрасывает настройки, обойдя сложную логику c, представленную Flink.
Другой подход, к которому я обращаюсь прямо сейчас, было бы использовать Table API, похоже, он лучше всего подходит для этой работы и фактически держит все элементы в своем состоянии в течение неопределенного периода времени.
Однако мой вопрос: прежде чем углубляться в API таблиц, хочу лишь заметить, что есть более элегантный способ, я хотел бы определить, является ли это оптимальным решением по этому вопросу или если есть даже лучше подходит концепция Flink, о которой я не знаю?
Редактировать: я забыл упомянуть: мы не используем POJO, а скорее оставляем его обобщенным c, что означает, что входящие данные идентифицируются как Tuple2<K,V>
, где K,V
каждый является экземпляром GenericRecord
. Соответствующая схема для сериализации / десериализации получается из реестра схем во время выполнения. Я не знаю, в какой степени конструкции SQL могут стать узким местом в этой ситуации. Кроме того, это замечание из документации Both tables must have distinct field names
заставляет меня немного сомневаться, поскольку у нас do есть те же имена полей, с которыми нам придется как-то обращаться, без огромных обходных путей.