Первый вопрос о состоянии ТТЛ. Как я могу дать заявить TTL? Пример говорит: Через 30 дней функция «Счетчик мошенничества» получит сообщение об истечении срока действия (от себя) и очистит свое состояние. Должен ли я сделать это вручную или есть другая функция? Как я могу сделать это руководство?
Вы можете сделать это вручную, используя задержанное сообщение . По сути, вы можете создать триггер обратного вызова, отправив себе сообщение с задержкой. Это сообщение является надежным и не будет потеряно в случае сбоя. Если вы посмотрите на функцию подсчет мошенничества , то в примере обслуживания модели вы увидите, что она делает именно это. Когда значение получено, ttl-сообщение отправляется с 30-дневной задержкой. Когда это сообщение получено, счетчик уменьшается.
Второй вопрос о keyedstream. Пример говорит: существует несколько экземпляров «Счет мошенничества» - например, по одному на учетную запись клиента. Должен ли я поместить значения в PersistedTable? Например . Могу ли я очистить состояние для указанной клавиши c?
Все экземпляры функций являются «ключами», при этом код пользователя всегда вызывается в области действия ключа, и все сохраняемые поля ограничиваются этой областью. ключ. Ключ является компонентом "id" адреса . В вашем примере у вас может быть функция «CustomerFunction», которая отслеживает информацию о каждом клиенте вашего бизнеса. Если вы хотите взаимодействовать с этим клиентом, вы получите сообщение, в котором указывается, что клиенты используют uid в качестве «идентификатора» адреса.
new Address(new FunctionType("ns", "customer"), "customer-id-1");
Если вы отслеживаете количество клиентов, вам нужен только PersistedValue, поскольку он уже ограничен этим идентификатором клиента. Возвращаясь к примеру подсчета мошенничества, эта функция ограничена «идентификатором счета», она отслеживает количество мошеннических транзакций на банковский счет.
Последний вопрос касается окон и водяных знаков. Как реализовать эту функцию в Stateful Functions 2.0?
Эти функции напрямую не поддерживаются в statefun 2.0. Причина windows заключается в том, что они в основном применимы к обработке данных, а не к разработке приложений. В этих случаях вы, вероятно, лучше справляетесь с использованием Flink DataStream и Table API, хотя их можно реализовать самостоятельно в коде пользователя.
Время события сложное. Время события использует «водяные знаки» под капотом, чтобы отслеживать ход времени в системе. Они зависят от данных, упорядоченных относительно их водяных знаков. Это означает, что если событие x попадает с отметкой времени 1:59 перед водяным знаком на 2 часа, оно всегда должно оставаться перед этим водяным знаком. В противном случае эта своевременная запись будет ошибочно помечена как запоздалая.
Stateful Функции основаны на итерации и произвольной передаче сообщений. Поскольку записи могут go в любом направлении проходить через поток данных, время события точно не определено.