flink - как использовать состояние как кеш - PullRequest
0 голосов
/ 27 августа 2018

Я хочу читать историю из штата.если состояние равно нулю, тогда прочитайте hbase и обновите состояние, используя onTimer для установки состояния ttl.Проблема в том, как выполнить пакетное чтение hbase, потому что чтение отдельной записи из hbase неэффективно.

1 Ответ

0 голосов
/ 27 августа 2018

В общем, если вы хотите кэшировать / отражать состояние из внешней базы данных во 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 напрямую, по нижнему пути, если необходимые данные находятся в кеше, они используются.В противном случае запись буферизуется в ожидании поступления данных для кэша из верхнего пути.

...