当前位置: 首页 > 知识库问答 >
问题:

Flink可以处理单个表/窗口的大约50 GB的状态吗?

司空炯
2023-03-14

我正在构建一个流分析,对于单个表,它需要大约50 GB的初始状态内存。~50 GB是我将状态加载到Scala HashMap[String,String]时使用的RAM量。

对于一个随时间增长的单个表,Flink能处理大约50 GB的状态吗?

我是否能够以流式方式对此表执行查找和更新?

注意事项:

  • 我无法将类型更改为更小的类型
  • 该状态用作将一个字符串映射到另一个字符串的查找
  • 该州需要三年的时间才能翻番到100GB(激进的估计是,目前的州需要十年才能生产)
  • 这个Flink博客声称状态大小不应该是个问题,但我想在旋转它之前我会再检查一遍。提到了TB的状态。
    • 这是一个很好的例子https://flink.apache.org/features/2018/01/30/incremental-checkpointing.html这句话的意思是:

共有1个答案

陆运乾
2023-03-14

对于Flink状态下的单个表,50-100 GB不是问题。

但需要明确的是,当我们谈论在 Flink 中具有大量状态(例如,TB)时,我们谈论的是跨许多并行任务进行分片的键控状态。是的,您可以有一个非常大的表,但任何给定实例将只有该表的行的子集。

请注意,您需要选择一个状态后端 - 基于堆的状态后端,它将状态保留在内存中,作为 JVM 堆上的对象,或者 RocksDB 状态后端,它将状态保留为具有内存中缓存的磁盘上的序列化字节。

 类似资料:
  • 在阅读了Flink的文档并四处搜索后,我无法完全理解Flink的句柄在其窗口中的状态。假设我有一个每小时滚动的窗口,其中包含一个聚合函数,该函数将消息累积到某个java pojo或scala case类中。该窗口的大小将与一小时内进入该窗口的事件数量相关联,还是仅仅与POJO/Case类相关联,因为我将事件累加到该对象中。(例如,如果将10000个味精数成一个整数,大小会接近10000*味精大小还

  • 我想使用早期触发逻辑进行窗口聚合(您可以认为聚合是由窗口关闭或特定事件触发的),我阅读了文档:https://ci . Apache . org/projects/flink/flink-docs-release-1.12/dev/stream/operators/windows . html # incremental-window-aggregate-with-aggregate functi

  • 我有两条流: 测量 WhoMeasured(关于谁进行了测量的元数据) 这些是它们的案例类: 流包含大量数据。流几乎没有任何可用性。事实上,对于<code>who_measured_id</code>流中的每个<code>who_。这本质上是一个哈希表,由流填充。 在我的自定义窗口函数中 这是我的工作。现在你可能会看到,有一些东西不见了:两个流的结合。 因此,从本质上讲,这是一种查找表,当流中的新

  • 我们正在构建一个具有两个流的应用程序: 大量信息流 我们希望连接这两个流以获得共享状态,以便第一个流可以使用第二个状态进行扩展。 每天左右,拼花文件(第二流的源代码)都会更新,这需要我们清除第二流的状态并重建它(可能需要大约2分钟)。 问题是,我们可以在该进程运行时阻止/延迟来自第一流的消息吗? 谢谢。

  • 我有一个相当简单的管道(代码比文字更好): 我的问题是,对于给定的窗口,我必须根据以下内容计算新的状态: 上一个状态(即上一个窗口的计算状态) 接收的事件 我希望避免调用外部服务来获取上一个状态,而是获取上一个窗口的状态。有可能吗?

  • 我有一个流(KafkaMSG流到一个主题上),有一个flinkKafka消费者,我注意到一个有趣的行为,我想解决这个问题。 当数据正在流入时,如果它在窗口“完成”之前停止,或者如果数据结束(在几个窗口之后)并且没有到达窗口的末尾,则管道的其余部分不会触发。 流程示例: 我正在使用的Flink Kafka消费者010与env时间特性设置为事件时间。和consumer.assign时间戳和水印(新周期