apache-flink - 如何在共享相同状态的同时横向扩展 Flink?
问题描述
工作负载的语义如下:
Flink 算子从同一个 Kafka 主题中读取事件。每个都event
需要由一个昂贵的函数处理f
一次,理想情况下,如果不是至少一次。事件之间存在相关性,因此每个事件都应基于累积state
(由初始状态的事件累积)来处理。
我们如何在 Flink 中为这个用例水平扩展?我想同时处理事件,但所有事件处理都依赖于相同的状态。在我的用例中,状态的大小将首先上升到 1 TB,然后在 1 TB 左右波动。
解决方案
如果您的应用程序需要一个可供每个事件访问的集中式数据结构,那么该应用程序将无法水平扩展。
Flink 通过独立处理数据流的分区来实现水平扩展。这通常是通过从每个事件中计算一个键并围绕该键对流进行分区来完成的。对于每个不同的键,状态是独立维护的,水平缩放的限制是不同键的数量(键空间的大小)。重新缩放是自动处理的,并通过在并行实例之间重新分片一组键来实现。
Flink 也支持 non-keyed state,但基本原理仍然适用:缩放只能通过对流进行分区来实现,并在每个分区内独立维护状态。
推荐阅读
- python - 无法满足的错误 conda-installing MySQL-python
- java - 我怎样才能得到这个ID?
- python - 安装 lib 表时出错,在 windows 中找不到 hdf5
- text-editor - 括号扩展停止工作
- c# - 如何使标题文本在 TemplateField 中动态显示?
- maven - Jenkins 管道未完成 tomcat 战争部署
- python - 如何为每个点绘制具有指定颜色的 3D 散点图
- vba - 在 VBA 中将范围设置为找到的字符串位置
- c++ - 如何将多个函数重载作为单个参数传递?
- javascript - 如何将单选按钮的值设置为段落标签