我有一个用Flink编写的流处理应用程序,我想使用状态后端的内部键值存储来计算流聚合。因为我正在处理很多聚合,所以我想避免在 Flink 应用程序中维护它们,就像目前提供的内存支持和文件支持的实现一样。相反,我想在Apache Ignite中维护状态的缓存,这反过来可以使用直写和通读功能在HBase中提供更可靠的备份。
理想情况下,我将在每个物理节点上都有一个本地 Ignite 缓存,用于处理该节点上所有长时间运行的 Flink 运算符的状态。 例如,每个节点在 8 GB 容器中都有一个可用的 Ignite 节点,无论它运行 1 个还是 10 个 Flink 运算符。
问题是我希望 Flink 和 Ignite 都在 YARN 上运行。通过一致的分区,我可以确保数据通常被发送到正确的缓存,并且在发生故障等情况下,可以从HBase重新填充它。我面临的问题是 Ignite 似乎随机从 YARN 请求容器,这意味着即使我将 Ignite 节点的数量设置为与物理节点的数量完全相同,我也无法保证实际上有可用的本地缓存。
关于如何实现每个物理节点设置一个 Ignite 节点的任何建议?
创建了一个票证来增强使用 YARN: https://issues.apache.org/jira/browse/IGNITE-3214 的资源分配。社区中的某个人会把它捡起来并修复。