开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink社区有没有做这种操作呢??

假设我的程序并行度很大,而且和外部交互很多,比如redis,然后我如果程序挂了,自动恢复,那么会同一瞬间大量的连接redis,然后会导致连接数过多导致任务失败,然后又会重试。

Flink社区有没有做,比如初始化task或者并行度任务的时候,随机延迟1-5秒之类的,打散初始化时间,不让所有操作同时操作呢?

展开
收起
三分钟热度的鱼 2024-01-17 17:06:22 18 0
1 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    Apache Flink 社区确实考虑过并行任务启动时的资源争抢问题,特别是在与外部系统交互时可能会遇到的连接数过多、瞬时压力过大的情况。Flink 本身并没有直接提供一个全局的任务初始化随机延迟功能,但是可以通过一些配置和编程方式间接实现这个需求。

    针对 Redis 连接池的问题,您可以采取以下策略:

    1. 自定义 Redis 连接器:在实现 Redis 连接器时,可以设计一个带并发控制或者连接池管理的组件,确保在初始化或恢复时不会同时创建大量连接。例如,可以设置一个信号量来控制同时建立 Redis 连接的数量。

    2. 配置 Redis 连接池大小:根据您的 Redis 实例规格和任务规模合理配置 Redis 连接池大小,防止瞬时连接数超过 Redis 的最大连接数。

    3. 使用 Flink 程序延迟提交:虽然 Flink 没有直接提供随机延迟启动的功能,但您可以在程序中手动添加一个随机延时,比如在 RichParallelSourceFunction 的 open 方法中(或者其他适当的地方),让各个子任务以随机时间间隔启动。

    4. 配合 Kubernetes 或者其他集群调度器:利用 Kubernetes 的 Pod 延迟启动特性或者其他的集群调度策略,实现作业容器的延时启动,从而打散对 Redis 的访问压力。

    总之,虽然 Flink 本身没有直接提供您所描述的功能,但通过上述策略可以有效地解决大规模并行任务在与外部系统交互时可能产生的并发问题。

    2024-01-18 14:21:33
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载