我有一个用 Flink 编写的流处理应用程序,我想使用来自状态后端的内部键值存储来计算流聚合。因为我要处理很多聚合,所以我想避免像当前提供的内存支持和文件支持的实现那样在 Flink 应用程序中将它们维护在堆上。相反,我想在 Apache Ignite 中维护状态缓存,这反过来可以使用直写和直读功能在 HBase 中提供更可靠的备份。
理想情况下,我会在每个物理节点上都有一个本地 Ignite 缓存,用于处理该节点上所有长时间运行的 Flink 操作符的状态。例如,每个节点在可用的 8 GB 容器中都有一个 Ignite 节点,无论它运行 1 个还是 10 个 Flink 操作符。
问题是我希望 Flink 和 Ignite 都在 YARN 上运行。通过一致性分区,我可以确保一般数据被发送到正确的缓存,并且在出现故障等情况下,可以从 HBase 重新填充。我面临的问题是 Ignite 似乎随机地从 YARN 请求容器,这意味着我不能保证实际上有可用的本地缓存,即使我将 Ignite 节点的数量设置为与物理节点的数量完全相同节点。
有关如何为每个物理节点设置一个 Ignite 节点的任何建议?