В общем, если вы хотите кэшировать / отражать состояние из внешней базы данных во Flink, наиболее эффективный подход - это поток мутаций базы данных во Flink - иными словами, превратить Flink в конечную точку репликации для данных изменений базы данных.захват (CDC) поток, если база данных поддерживает это.
У меня нет опыта работы с hbase, но https://github.com/mravi/hbase-connect-kafka является примером того, что может сработать (если поставить kafka между hbase и flink).
Если вы предпочитаетезапрашивайте hbase из Flink и хотите избежать точечных запросов для одного пользователя за раз, тогда вы можете создать что-то вроде этого:
-> queryManyUsers -> keyBy(uId) ->
streamToEnrich CoProcessFunction
-> keyBy(uID) ------------------->
Здесь вы бы разбили свой поток, отправив одну копию через что-то вродеоконная или процессная функция или асинхронный ввод-вывод для запроса hbase в пакетах и отправки результатов в функцию CoProcessFunction, которая содержит кэш и выполняет обогащение.
Когда записи поступают в эту CoProcessFunction напрямую, по нижнему пути, если необходимые данные находятся в кеше, они используются.В противном случае запись буферизуется в ожидании поступления данных для кэша из верхнего пути.