#apache-flink #flink-sql
#apache-flink #flink-sql
Вопрос:
Я нахожусь в процессе создания ETL и модуля управления мошенничеством с использованием flink для анализа последовательности транзакций по кредитным картам в реальном времени.
Все транзакции принимаются открытым API, который помещает данные в раздел Kafka. Сначала полученные данные необходимо проверить и очистить, а затем сохранить в базе данных. Следующим шагом является анализ мошенничества этих транзакций.
На этом первом шаге с помощью Flink я должен проверить в базе данных Card, что карта известна, прежде чем продолжить. Проблема в том, что в этой базе данных около миллиарда карт, и со временем может быть добавлена новая карта. Итак, я не уверен, смогу ли я кэшировать весь номер карты в памяти или как эффективно обработать эту проверку: может ли Flink обрабатывать какой-то скользящий кэш для проверки наличия карты в пакете?
Комментарии:
1. Можете ли вы уточнить, что вы подразумеваете под «Способен ли Flink обрабатывать какой-то скользящий кэш для проверки наличия карты в пакете?»
2. Я думал о своего рода кэше, хранящем n-е самые последние просмотренные значения в потоке.
3. Вы можете указать TTL для значений с истекшим сроком действия, которые некоторое время не были нужны.
Ответ №1:
Что вы могли бы сделать, так это зеркально отобразить базу данных card в состояние Flink с разделением ключей, либо в куче, либо с помощью RocksDB, если вы хотите, чтобы это перешло на диск. Состояние с разделением по ключам распределено по кластеру, поэтому, если вы хотите сохранить всю карточную базу данных в памяти, вы можете масштабировать кластер до тех пор, пока это не станет возможным.
Чтобы сохранить только недавно просмотренные значения, вы можете полагаться на TTL состояния для истечения срока действия записей, к которым в последнее время не обращались.
Альтернатива: Flink SQL поддерживает выполнение потоковых поисковых соединений с базами данных JDBC, и вы можете настроить кэширование для этого.