0

我的有状态函数是将数据写入数据库,但它是不确定的,因此从检查点恢复可能会导致数据库包含不一致的数据。我的想法是在 Flink 的持久状态中“缓冲”数据,并且只有在检查点完成后才将数据写入数据库。context.sendAfter(Duration duration, Address address, Object input);我想我可以通过使用, 通过将持续时间设置为高于检查点间隔来实现这一点。

是否有更好的解决方案可以使函数明确地对检查点做出反应?

4

2 回答 2

1

计划 Stateful Functions 2.2 将支持 Flink 数据流作为入口和出口 - 请参阅https://github.com/apache/flink-statefun/pull/133 - 然后应该允许您使用满足您需求的 Flink 接收器连接器. 如果 Flink 还没有包含合适的接收器,您可以基于通用的两阶段提交接收器(参与检查点过程)实现一个。

另一种选择是以某种方式使有状态函数能够意识到检查点,但到目前为止还没有完成(据我所知,甚至没有讨论过)。

于 2020-08-25T13:50:47.983 回答
1

目前,处理有状态函数(即写入数据库)的副作用的最佳方法是使用恰好一次的出口(如 Kafka)。与其直接从函数写入数据库,不如向“副作用出口”发出消息。

要完成此操作,您需要编写一个简单的程序来使用该 Kafka 主题(仅提交的记录)并将它们写入数据库。

为了简化这一点,StateFun 的未来版本将包含一个原生 JdbcSink。

于 2020-09-01T12:35:32.870 回答