Anı*_*ici 3 state stream-processing apache-flink flink-streaming flink-statefun
我研究了 Apache Flink 的新 Stateful Functions 2.0 API。我阅读了以下文档链接https://ci.apache.org/projects/flink/flink-statefun-docs-stable/。我还在 Git 存储库中运行了示例。( https://github.com/ververica/stateful-functions/tree/master/stateful-functions-examples )\n我对实现有几个问题。
\n\nhttps://flink.apache.org/stateful-functions.html --> 页面末尾有一个示例,用于欺诈检测的交易评分。
\n\n第一个问题是关于状态 TTL 的。我如何向 TTL 提供状态?示例表示:30 天后,\xe2\x80\x9cFraud Count\xe2\x80\x9d 函数将收到一条过期消息(来自其自身)并清除其状态。我应该阅读本手册还是还有其他功能?我该如何做这本手册?
\n\n关于keyedstream的第二个问题。示例表示: \xe2\x80\x9cFraud Count\xe2\x80\x9d 的多个实例将存在 \xe2\x80\x94 例如,每个客户帐户一个。我应该给 赋值PersistedTable<K,V>吗?例如<customerid,count>。我可以清除特定键的状态吗?
最后一个问题是关于窗口和水印的。如何将这些功能实现到 Stateful Functions 2.0?
\n小智 5
\n\n\n第一个问题是关于状态 TTL 的。我如何向 TTL 提供状态?示例表示:30 天后,\xe2\x80\x9cFraud Count\xe2\x80\x9d 函数将收到一条过期消息(来自其自身)并清除其状态。我应该手动执行此操作还是有其他功能?我该如何做这本手册?
\n
您可以使用延迟消息手动执行此操作。实际上,您可以通过向自己发送延迟消息来创建回调触发器。该消息是持久的,并且在发生故障时不会丢失。如果您查看模型服务示例中的欺诈计数函数,您会发现它正是这样做的。当收到一个值时,会延迟 30 天发送一条 ttl 消息。当收到该消息时,计数就会递减。
\n\n\n\n\n关于keyedstream的第二个问题。示例表示: \xe2\x80\x9cFraud Count\xe2\x80\x9d 的多个实例将存在 \xe2\x80\x94 例如,每个客户帐户一个。我应该将值放入 PersistedTable 中吗?例如 。我可以清除特定键的状态吗?
\n
所有函数实例都是“键控”的,因为用户代码始终在键的范围内调用,并且所有持久字段的范围都限于该键。关键是地址的“id”部分。在您的示例中,您可以有一个函数“CustomerFunction”来跟踪您企业的每个客户的信息。当您想要与该客户交互时,您将向其发送消息,指定该客户 uid 作为地址的“id”。
\n\nnew Address(new FunctionType("ns", "customer"), "customer-id-1");\nRun Code Online (Sandbox Code Playgroud)\n\n如果您要跟踪每个客户的计数,则只需要 PersistedValue,因为它的范围已经限定为该客户 ID。回到欺诈计数示例,该函数的范围为“帐户 ID”,它跟踪每个银行帐户的欺诈交易数量。
\n\n\n\n\n最后一个问题是关于窗口和水印的。如何将这些功能实现到 Stateful Functions 2.0?
\n
Statefun 2.0 不直接支持这些功能。使用windows的原因是它们大多适用于数据处理,而不是应用程序开发。对于这些用例,尽管可以在用户代码中自行实现,但使用 Flink 的 DataStream 和 Table API 可能会更好。
\n\n活动时间很棘手。事件时间在幕后使用“水印”来跟踪系统内时间的进展。它们依赖于与其水印相关的良好排序的数据。这意味着如果事件 x 在 2:00 的水印前面以 1:59 的时间戳被摄取,则它必须始终保持在该水印前面。否则,这个准时记录将被错误地标记为迟到。
\n\n有状态函数基于迭代和任意消息传递。由于记录可以通过数据流向任何方向传输,因此事件时间没有明确定义。
\n| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |