kubernetes上有状态apache flink应用程序的连续部署

kubernetes上有状态apache flink应用程序的连续部署,kubernetes,apache-flink,flink-streaming,Kubernetes,Apache Flink,Flink Streaming,我想在kubernetes上运行ApacheFlink(1.11.1)流媒体应用程序。文件系统状态后端保存到s3。s3的检查点正在工作 args: - "standalone-job" - "-s" - "s3://BUCKET_NAME/34619f2862ce3e5fc91d80eae13a434a/chk-4/_metadata" - "--job-classname" -

我想在kubernetes上运行ApacheFlink(1.11.1)流媒体应用程序。文件系统状态后端保存到s3。s3的检查点正在工作

args:
  - "standalone-job"
    - "-s"
    - "s3://BUCKET_NAME/34619f2862ce3e5fc91d80eae13a434a/chk-4/_metadata"
    - "--job-classname"
    - "com.abc.def.MY_JOB"
    - "--kafka-broker"
    - "KAFKA_HOST:9092"
所以我面临的问题是:
  • 我必须手动选择上一个状态目录。有没有可能让它变得更好
  • 该作业增加chk dir,但不使用检查点。意味着我在第一次看到事件时抛出一个新事件,并将其存储到
    ListState
    ,每当我通过Gitlab部署应用程序的较新版本时,它都会再次抛出此事件
  • 当我定义了文件系统的state.backend时,为什么必须在代码中显式启用检查点<代码>环境启用检查点(持续时间为秒(60).toMillis())和
    env.getCheckpointConfig().enableExternalizedCheckpoints(在取消时保留)
      • 您可能更喜欢使用,这将抽象级别提高到不必在此级别处理细节的程度。它有一个API,设计时考虑了CI/CD
      • 我不确定我是否理解您的第二点,但在恢复期间,您的工作将倒带并重新处理一些数据是正常的。Flink不保证只处理一次,而是保证只处理一次语义:每个事件都会影响Flink管理的状态一次。这是通过回滚到最近检查点中的偏移量来完成的,并将所有其他状态回滚到消耗所有数据(直到这些偏移量)之后的状态
      • 在作业运行时,有一个状态后端作为存储作业工作状态的位置是必要的。如果不启用检查点,则工作状态将不会被检查点,并且无法恢复。但是,从Flink 1.11开始,您可以通过配置文件启用检查点,使用

      有几种方法可以将工作负载部署到kubernetes、简单YAML文件、Helm图表和操作员

      升级有状态的Flink作业不像升级无状态服务那么简单,您只需要更新二进制文件并重新启动

      升级FLink工作时,您需要采取一个保存点或获取最新的检查点DIR,然后更新二进制并最终重新提交您的作业,在这种情况下,我认为简单的YAML文件和Helm图表不能帮助您实现这一点,您应该考虑实现FLink操作符来执行升级作业。


      谢谢你,大卫。Vervica Platform Helm Chart是否可以用于公司(在k8s内部运行的流媒体应用程序意味着不是公共云产品)?没有在中看到任何限制。是的,它可以用于商业和生产用途--请参阅--只要您遵守许可协议中的限制。社区-edition@ververica.com了解更多信息。有什么想法或想法没有VP:CE会是什么样子?是否有可能只使用ApacheFlink制作CI/CD?在开源flink的基础上自己制作CI/CD当然是可行的,但部署过程涉及几个步骤,其中任何一个都可能失败。所以完全自动化有点复杂。
      execution.checkpointing.interval: 60000
      execution.checkpointing.externalized-checkpoint-retention: RETAIN_ON_CANCELLATION