flink窗口和状态维护

monwx1rj  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(481)

我正在为apache flink开发数据流,我有几个问题。非常感谢您的帮助。谢谢。
1) 创建翻滚窗口有什么限制吗。例如,如果我想为每个用户id创建一个2秒的滚动窗口,假设我有超过1000万个用户id,这会是一个问题(我正在使用keyby user id,然后创建一个时间窗口(2秒)?flink内部的这些窗口是如何维护的?
2) 我研究了循环分区的重新平衡。假设我设置了一个集群,如果我的源并行度为1,并且如果我进行了重新平衡,我的数据是否会在多台机器之间进行洗牌以提高性能?如果有,是否有一个特定的端口用于将数据传输到集群中的其他节点?
3) 国家维护有什么限制吗?我计划维护一些与用户id相关的数据,这些数据可能会变得非常大。我读到Flink用石头数据库来维持国家。只是想看看在维护多少数据方面是否有任何限制?
4) 如果数据量较少,状态在哪里维护(我猜在jvm内存中)如果集群中有多台机器,那么每个节点都能获得当前的状态版本吗?

dgtucam1

dgtucam11#

如果你在你的溪流旁键入 user ,flink将按用户对流进行内部分区。因此,用户分布在一组并行子任务中。窗口操作符的并行性控制每个并行子任务的负载。如果您分配足够的机器并适当地配置程序的并行性,那么处理1000万用户应该是没有问题的。
对, rebalance() 如果您的作业在多台计算机上运行,则将在网络上洗牌。在默认配置下,数据端口是自动选择的。如果需要固定端口,可以使用 taskmanager.data.port 键来配置它。
状态大小限制取决于配置的状态后端。对于rocksdb state后端,限制是本地文件系统的大小,即rocksdb将数据溢出到磁盘。如果达到此限制,可以增加并行性,因为每个辅助进程通常处理多个键中的键。
它取决于状态持久化的状态后端(磁盘或内存)的实现。我假设rocksdb状态后端也会在内存中缓存一些数据。请注意,运算符状态不是全局可访问的,即运算符的每个并行子任务只能访问其自身的本地状态,不能读取或写入同一运算符的另一个子任务的状态。

相关问题