大数据之-Flink学习笔记

news2025/1/14 19:43:12

Flink

Apache Flink — 数据流上的有状态计算。

Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算处理。

任何类型的数据都以事件流的形式生成。信用卡交易、传感器测量、机器日志或网站或移动应用程序 2上的用户交互,所有这些数据都以流的形式生成。

数据可以作为无界有界流进行处理。

无界数据流:有定义流的开始,但是没有定义结束。会一直提供数据,没有结束。所以要一直连续的处理无界流,所以一旦有数据到来就要立即处理,不能等数据都到再处理,因为输入是无限的。处理无界数据通常需要按特定顺序(如数据引入的顺序),以便能够推断结果的完整性。

有界数据流:有具体的开始和结束。有界流的处理也称为批处理。有界数据可以等待所有数据到达之后再进行计算处理。有界数据不需要按顺序引入,因为可以对有界的数据集进行排序。

在这里插入图片描述
在这里插入图片描述

# 添加完这些依赖就可以使用Java代码使用Flink的流处理功能。

# 这个依赖项包含了Flink的流处理API和相关的类库。主要干活的
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java</artifactId>
    <version>${flink.version}</version>
</dependency>

# Flink客户端库,用这个可以连接到Flink集群并提交或管理Flink作业。
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-clients</artifactId>
    <version>${flink.version}</version>
</dependency>

Flink部署

在这里插入图片描述

flink部署模式

在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。Flink为各种场景提供了不同的部署模式,主要有以下三种:会话模式(Session Mode)、单作业模式(Per-Job Mode)、应用模式(Application Mode)。

它们的区别主要在于:集群的生命周期以及资源的分配方式;以及应用的main方法到底在哪里执行——客户端(Client)还是JobManager。

会话模式(Session Mode)

请添加图片描述

*0)集群规划*

表3-1 集群角色分配

节点服务器*hadoop**102**hadoop**103**hadoop**104*
角色充当JobManager和TaskManagerTaskManagerTaskManager

具体安装部署步骤如下:

*1)下载并解压安装包*

(1)https://flink.apache.org/downloads/ 下载安装包flink-1.17.0-bin-scala_2.12.tgz,将该jar包上传到hadoop102节点服务器的/opt/software路径上。

(2)在/opt/software路径上解压flink-1.17.0-bin-scala_2.12.tgz到/opt/module路径上。

[atguigu@hadoop102 software]$ tar -zxvf flink-1.17.0-bin-scala_2.12.tgz -C /opt/module/

*2)修改集群配置*

(1)进入conf路径,修改flink-conf.yaml文件,指定hadoop102节点服务器为JobManager

[atguigu@hadoop102 conf]$ vim flink-conf.yaml

修改如下内容:

# JobManager节点地址.

jobmanager.rpc.address: hadoop102

jobmanager.bind-host: 0.0.0.0

rest.address: hadoop102

rest.bind-address: 0.0.0.0

\# TaskManager节点地址.需要配置为当前机器名

taskmanager.bind-host: 0.0.0.0

taskmanager.host: hadoop102

(2)修改workers文件,指定hadoop102、hadoop103和hadoop104为TaskManager

[atguigu@hadoop102 conf]$ vim workers

修改如下内容:

hadoop102

hadoop103

hadoop104

(3)修改masters文件

[atguigu@hadoop102 conf]$ vim masters

修改如下内容:

hadoop102:8081

(4)另外,在flink-conf.yaml文件中还可以对集群中的JobManager和TaskManager组件进行优化配置,主要配置项如下:

l jobmanager.memory.process.size:对JobManager进程可使用到的全部内存进行配置,包括JVM元空间和其他开销,默认为1600M,可以根据集群规模进行适当调整。

l taskmanager.memory.process.size:对TaskManager进程可使用到的全部内存进行配置,包括JVM元空间和其他开销,默认为1728M,可以根据集群规模进行适当调整。

l taskmanager.numberOfTaskSlots:对每个TaskManager能够分配的Slot数量进行配置,默认为1,可根据TaskManager所在的机器能够提供给Flink的CPU数量决定。所谓Slot就是TaskManager中具体运行一个任务所分配的计算资源。

l parallelism.default:Flink任务执行的并行度,默认为1。优先级低于代码中进行的并行度配置和任务提交时使用参数指定的并行度数量。

关于Slot和并行度的概念,我们会在下一章做详细讲解。

*3)分发安装目录*

(1)配置修改完毕后,将Flink安装目录发给另外两个节点服务器。

[atguigu@hadoop102 module]$ xsync flink-1.17.0/

(2)修改hadoop103的 taskmanager.host

[atguigu@hadoop103 conf]$ vim flink-conf.yaml

修改如下内容:

# TaskManager节点地址.需要配置为当前机器名

taskmanager.host: hadoop103

(3)修改hadoop104的 taskmanager.host

[atguigu@hadoop104 conf]$ vim flink-conf.yaml

修改如下内容:

# TaskManager节点地址.需要配置为当前机器名

taskmanager.host: hadoop104

*4)启动集群*

(1)在hadoop102节点服务器上执行start-cluster.sh启动Flink集群:

[atguigu@hadoop102 flink-1.17.0]$ bin/start-cluster.sh

(2)查看进程情况:

[atguigu@hadoop102 flink-1.17.0]$ jpsall 

=============== hadoop102 ===============

4453 StandaloneSessionClusterEntrypoint

4458 TaskManagerRunner

4533 Jps

=============== hadoop103 ===============

2872 TaskManagerRunner

2941 Jps

=============== hadoop104 ===============

2948 Jps

2876 TaskManagerRunner

*5)访问Web UI*

启动成功后,同样可以访问http://hadoop102:8081对flink集群和任务进行监控管理。
请添加图片描述

这里可以明显看到,当前集群的TaskManager数量为3;由于默认每个TaskManager的Slot数量为1,所以总Slot数和可用Slot数都为3。

向集群提交作业

在上一章中,我们已经编写读取socket发送的单词并统计单词的个数程序案例。本节我们将以该程序为例,演示如何将任务提交到集群中进行执行。具体步骤如下。

*1**)环境准备*

在hadoop102中执行以下命令启动netcat。

[atguigu@hadoop102 flink-1.17.0]$ nc -lk 7777

*2**)**程序**打包*

(1)在我们编写的Flink入门程序的pom.xml文件中添加打包插件的配置,具体如下:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <artifactSet>
                                <excludes>
                                    <exclude>com.google.code.findbugs:jsr305</exclude>
                                    <exclude>org.slf4j:*</exclude>
                                    <exclude>log4j:*</exclude>
                                </excludes>
                            </artifactSet>
                            <filters>
                                <filter>
                                    <!-- Do not copy the signatures in the META-INF folder.
                                    Otherwise, this might cause SecurityExceptions when using the JAR. -->
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers combine.children="append">
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

(2)插件配置完毕后,可以使用IDEA的Maven工具执行package命令,出现如下提示即表示打包成功。

-------------------------------------------------------------------

[INFO] BUILD SUCCESS

-------------------------------------------------------------------

打包完成后,在target目录下即可找到所需JAR包,JAR包会有两个,FlinkTutorial-1.0-SNAPSHOT.jar和FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar,因为集群中已经具备任务运行所需的所有依赖,所以建议使用FlinkTutorial-1.0-SNAPSHOT.jar。比较大的带有依赖。

*3)**在Web* *UI上提交作业*

(1)任务打包完成后,我们打开Flink的WEB UI页面,在右侧导航栏点击“Submit New Job”,然后点击按钮“+ Add New”,选择要上传运行的JAR包,如下图所示。
在这里插入图片描述

JAR包上传完成,如下图所示:
在这里插入图片描述

(2)点击该JAR包,出现任务配置页面,进行相应配置。

主要配置程序入口主类的全类名,任务运行的并行度,任务运行所需的配置参数和保存点路径等,如下图所示,配置完成后,即可点击按钮“Submit”,将任务提交到集群运行。
在这里插入图片描述

(3)任务提交成功之后,可点击左侧导航栏的“Running Jobs”查看程序运行列表情况。
在这里插入图片描述

(4)测试

​ ①在socket端口中输入hello

[atguigu@hadoop102 flink-1.17.0]$ nc -lk 7777

hello

②先点击Task Manager,然后点击右侧的192.168.10.104服务器节点
在这里插入图片描述

​ ③点击Stdout,就可以看到hello单词的统计
在这里插入图片描述

​ 注意:如果hadoop104节点没有统计单词数据,可以去其他TaskManager节点查看。

(4)点击该任务,可以查看任务运行的具体情况,也可以通过点击“Cancel Job”结束任务运行。
在这里插入图片描述

*4**)命令行提交作业*

除了通过WEB UI界面提交任务之外,也可以直接通过命令行来提交任务。这里为方便起见,我们可以先把jar包直接上传到目录flink-1.17.0下

(1)首先需要启动集群。

[atguigu@hadoop102 flink-1.17.0]$ bin/start-cluster.sh

(2)在hadoop102中执行以下命令启动netcat。

[atguigu@hadoop102 flink-1.17.0]$ nc -lk 7777

(3)将flink程序运行jar包上传到/opt/module/flink-1.17.0路径。

(4)进入到flink的安装路径下,在命令行使用flink run命令提交作业。

[atguigu@hadoop102 flink-1.17.0]$ bin/flink run -m hadoop102:8081 -c com.atguigu.wc.SocketStreamWordCount ./FlinkTutorial-1.0-SNAPSHOT.jar

这里的参数 -m指定了提交到的JobManager,-c指定了入口类。

(5)在浏览器中打开Web UI,http://hadoop102:8081查看应用执行情况。

用netcat输入数据,可以在TaskManager的标准输出(Stdout)看到对应的统计结果。
在这里插入图片描述

(6)在/opt/module/flink-1.17.0/log路径中,可以查看TaskManager节点。

[atguigu@hadoop102 log]$ cat flink-atguigu-standalonesession-0-hadoop102.out

(hello,1)

(hello,2)

(flink,1)

(hello,3)

(scala,1)

单作业模式(Per-Job Mode)

在这里插入图片描述

应用模式(Application Mode)

在这里插入图片描述

这里我们所讲到的部署模式,相对是比较抽象的概念。实际应用时,一般需要和资源管理平台结合起来,选择特定的模式来分配资源、部署应用。接下来,我们就针对不同的资源提供者的场景,具体介绍Flink的部署方式。

DataStream API

DataStream API是Flink的核心层API,使用API实现对数据流的计算和处理。

一个Flink程序,其实就是对数据流DataStream的各种转换。具体来说,代码基本上都由以下几部分构成:
在这里插入图片描述

/**
 * 计算单词出现个数
 *
 * flink处理无界数据流
 * 程序会一直运行,一有数据来就处理
 *
 * @author shkstart
 * @create 2023-09-10 16:44
 */
public class SocketStreamWordCount {
    public static void main(String[] args) throws Exception {

        // 1.创建flink流式处理环境 StreamExecutionEnvironment
        StreamExecutionEnvironment see = StreamExecutionEnvironment.getExecutionEnvironment();

        // 2.接收要待处理的数据
        DataStreamSource<String> dateStream = see.socketTextStream("192.168.239.128", 7777);

        // 3.处理数据 数据处理后格式:(word,2)单词和对应出现的次数
        /**
         * flatMap(FlatMapFunction<T, R> flatMapper)
         * 为数据流的每一个元素调用flatMapper
         */
        System.out.println("原始数据流:" + dateStream);

        // FlatMapFunction转换,处理数据流元素
        FlatMapFunction<String, Tuple2<String, Integer>> flatMapFunction = new FlatMapFunctionImpl();
        SingleOutputStreamOperator<Tuple2<String, Integer>> transformedDataStream =
                dateStream.flatMap(flatMapFunction);

        System.out.println("处理后的数据流:" + transformedDataStream);

        // 按照word分组 按string分组 将Integer累加
        SingleOutputStreamOperator<Tuple2<String, Integer>> sum = transformedDataStream.keyBy(data -> data.f0).sum(1);


        // 4.展示
        sum.print();

        // 5.执行 开始处理
        // 代码末尾需要调用 流式处理环境 的execute方法,开始执行任务
        see.execute();

    }
}

public class FlatMapFunctionImpl implements FlatMapFunction<String , Tuple2<String,Integer>> {


    /**
     * 转换数据流元素
     * @param value 输入的元素
     * @param out 输出的元素
     * @throws Exception
     */
    @Override
    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
        // 切分
        String[] words = value.split(" ");

        // 收集
        for (String word : words) {
            out.collect(Tuple2.of(word,1));
        }
    }
}

1、执行环境

Flink程序可以在各种上下文环境中运行:我们可以在本地JVM中执行程序,也可以提交到远程集群上运行。

不同的环境,代码的提交运行的过程会有所不同。这就要求我们在提交作业执行计算时,首先必须获取当前Flink的运行环境,从而建立起与Flink框架之间的联系。

DataStream API执行模式包括:流执行模式、批执行模式和自动模式。

流执行模式(Streaming)

这是DataStream API最经典的模式,一般用于需要持续实时处理的无界数据流。默认情况下,程序使用的就是Streaming执行模式。

// 流处理环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

批执行模式(Batch)

专门用于批处理(处理有界数据)的执行模式。

自动模式(AutoMatic)

在这种模式下,将由程序根据输入数据源是否有界,来自动选择执行模式。

批执行模式的使用。主要有两种方式:

(1)通过命令行配置

bin/flink run -Dexecution.runtime-mode=BATCH ...

在提交作业时,增加execution.runtime-mode参数,指定值为BATCH。

(2)通过代码配置

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

env.setRuntimeMode(RuntimeExecutionMode.BATCH);

在代码中,直接基于执行环境调用setRuntimeMode方法,传入BATCH模式。

实际应用中一般不会在代码中配置,而是使用命令行,这样更加灵活。

2、数据源

从socket中读取数据

不论从集合还是文件,我们读取的其实都是有界数据。在流处理的场景中,数据往往是无界的。

我们之前用到的读取socket文本流,就是流处理场景。但是这种方式由于吞吐量小、稳定性较差,一般也是用于测试。

DataStream<String> stream = env.socketTextStream("localhost", 7777);
从Kafka读取数据

Flink官方提供了连接工具flink-connector-kafka,直接帮我们实现了一个消费者FlinkKafkaConsumer,它就是用来读取Kafka数据的SourceFunction。

所以想要以Kafka作为数据源获取数据,我们只需要引入Kafka连接器的依赖。Flink官方提供的是一个通用的Kafka连接器,它会自动跟踪最新版本的Kafka客户端。目前最新版本只支持0.10.0版本以上的Kafka。这里我们需要导入的依赖如下。

<dependency>

  <groupId>org.apache.flink</groupId>

  <artifactId>flink-connector-kafka</artifactId>

  <version>${flink.version}</version>

</dependency>

代码如下:

public class SourceKafka {
    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        KafkaSource<String> kafkaSource = KafkaSource.<String>builder()
            .setBootstrapServers("hadoop102:9092")
            .setTopics("topic_1")
            .setGroupId("atguigu")
            .setStartingOffsets(OffsetsInitializer.latest())
            .setValueOnlyDeserializer(new SimpleStringSchema()) 
            .build();

        DataStreamSource<String> stream = env.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "kafka-source");

        stream.print("Kafka");

        env.execute();
    }
}

3、转换算子

基本转换算子(map/** filter**/** flat**Map)****

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java复习-10-String类

String 类 实例化 String 本身包装的是一个数组&#xff0c;并且其有两种对象的实例化形式&#xff1a;直接赋值、构造方法实例化。 public class StringDemo {public static void main(String args[]){// 直接赋值String str1 "Hello,World";// 构造方法实例化S…

Web自动化测试理解

最近几天&#xff0c;由于工作需要接触Web自动化测试&#xff0c;所以我从网上找的资料&#xff0c;学习了解&#xff0c;然后自己总结汇总的随笔&#xff0c;如文章中有不足的地方&#xff0c;请大家多多指教&#xff1b;或者文章内容与他人相似&#xff0c;望见谅。 手工测试…

成都瀚网科技有限公司:抖店平台买家怎么修改评价?

在抖音电商平台上&#xff0c;买家的评价对店铺的声誉和销售业绩有着重要影响。然而&#xff0c;有时买家可能会因为某些原因想要修改之前的评价。那么&#xff0c;抖店平台上的买家如何修改评价呢&#xff1f;修改评价对店铺有什么影响&#xff1f;本文将介绍买家如何修改评价…

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境

控制台日志打印console的封装&#xff0c;加入美化、行显示与打印开关&#xff0c;支持node.js环境 为什么要写这个&#xff1f; 封装这个控制台日志打印工具&#xff0c;主要是在项目中自己做的SDK需要提供给其他开发人员使用&#xff0c;加入了日志美化和打印打开&#xff…

C语言 cortex-A7核UART总线实验

一、C 1&#xff09;uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h&quo…

maven清理本地仓库。删除_remote.repositories文件和删除失败的jar包

1.图预览 .bat文件要和仓库在同一平级目录 REPOSITORY_PATH要改成你自己仓库的地址 2、删除.lastUpdated文件(失败的jar包) 使用.bat文件 注明&#xff1a;REPOSITORY_PATHD:\software\Java\maven\repository 改成你仓库的地址 set REPOSITORY_PATHD:\software\Java\maven\rep…

nvm下载安装教程

前言 nvm 官网地址&#xff1a;https://nvm.uihtm.com 一、nvm 下载 进入 nvm github 地址&#xff0c;下载最新版本&#xff1a;https://github.com/coreybutler/nvm-windows/releases 点击选择当前最新版本。 滑动到底部&#xff0c;点击 nvm-setup.exe 下载安装文件。 接…

【C++ 番外】【指针】数组类型的指针,指向数组的指针,数组的元素是指针,这个视频说明白。数组和指针

from&#xff1a; https://www.bilibili.com/video/BV1H34y1K7AM/ 指向数组第一个元素的指针 数组类型指针 数组的类型都是指针 超级混合版本&#xff0c;加深理解

Spring-AOP+入门案例(注解)+AOP切入点语法+AOP通知类型

一、简介工作流程。 简介 SpringAop实际上就是代理模式 工作流程 二、导入依赖 1.spring-aop包 该包是在spring-context依赖下的子包&#xff0c;所以有context就有aop <dependency><groupId>org.springframework</groupId><artifactId>spring-con…

​消费盲返:消费者和商家都受益的消费返利

消费盲返是什么&#xff1f;它是一种新型的消费返利模式&#xff0c;它的核心思想是&#xff1a;消费者在平台购买商品后&#xff0c;可以获得后续一定数量的订单的部分利润作为奖励。这样&#xff0c;消费者不仅可以享受商品的优惠&#xff0c;还有可能赚取更多的钱。这种模式…

第七章 查找 六、平衡二叉树

目录 一、定义 二、最小不平衡子树 1、平衡方法 2、查找效率 三、插入、删除操作 平衡二叉树的插入操作&#xff1a; 平衡二叉树的删除操作&#xff1a; 1、例子1 &#xff08;1&#xff09;若我们要删除9 &#xff08;2&#xff09;若我们要删除55 2、例子2 ​编辑…

高云FPGA系列教程(10):letter-shell移植

文章目录 letter-shell简介letter-shell源码获取letter-shell移植函数和变量应用示例 本文是高云FPGA系列教程的第10篇文章。 shell&#xff0c;中文是外壳的意思&#xff0c;就是操作系统的外壳。通过shell命令可以操作和控制操作系统&#xff0c;比如Linux中的Shell命令就包括…

2023-09-21 LeetCode每日一题(收集树中金币)

2023-09-21每日一题 一、题目编号 2603. 收集树中金币二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 n 个节点的无向无根树&#xff0c;节点编号从 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示…

Redis学习笔记--001

Redis快速入门 文章目录 Redis快速入门一、初识Redis1.1、NoSQL数据库1.2、Redis介绍1.3、[Redis](https://redis.io/)的安装 二、Redis常见命令2.1、Redis默认启动2.2、指定配置启动2.3、Redis开机自启设置 三、Redis客户端3.1、Redis命令行客户端3.2、图形化桌面客户端 四、r…

Python Opencv实践 - 人脸识别CascadeClassifier

参考资料&#xff1a; 【PythonOpenCV 人脸检测—CascadeClassifier 级联分类器实现】_LPY。的博客-CSDN博客 ‘cv::CascadeClassifier::detectMultiScale‘_只要思想不滑坡办法总比困难多--小鱼干的博客-CSDN博客 import cv2 as cv import matplotlib.pyplot as plt import nu…

陆拾捌- 如何通过数据影响决策(三)

一、如何正确的引导别人&#xff1f; 引导与误导的区别是什么&#xff1f; 看下面这广告图 单看上面大字的结果&#xff0c;感觉好像真的使用过的人均觉得有好处 可如果我们看下面的细字 对111位连续14天食用&#xff08;本产品&#xff09;的燕麦片非重度使用者所做调研… 从…

Linux 系统移植(二)--系统调试

文章目录 一、 编译文件系统1.1 下载资源安装包1.2 配置模板ARM64目标平台1.3 配置交叉编译器1.4 配置登录用户名和密码1.5 配置Linux 控制台1.6 配置文件系统格式1.7 编译buildroot文件系统 二、编译ARM64 Linux三、启动 Qemu Linux系统参考链接&#xff1a; 一、 编译文件系统…

React(react18)中组件通信05——react-redux

React&#xff08;react18&#xff09;中组件通信05——react-redux 1. 前言1.1 React中组件通信的其他方式1.2 介绍React-Redux1.2.1 简单介绍React-Redux1.2.2 官网 1.3 安装react-redux 2. 简单改写redux的例子2.1 提供store2.2 连接 Components UI组件修改2.2.1 连接 Comp…

Dubbo 3.x源码(11)—Dubbo服务的发布与引用的入口

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的入口的源码。 此前我们学习了Dubbo配置的加载与覆盖的一系列源码&#xff1a; Dubbo 3.x源码(7)—Dubbo配置的加载入口源码Dubbo 3.x源码(8)—Dubbo配置中心的加载与优先级源码Dubbo 3.x源码(9)—Dubbo启动元数据中…

通过 Helm Chart 部署 Easysearch

Easysearch 可以通过 Helm 快速部署了&#xff0c;快来看看吧&#xff01; Easysearch 的 Chart 仓库地址在这里 https://helm.infinilabs.com。 使用 Helm 部署 Easysearch 有两个前提条件&#xff1a; cert-managerlocal-path 我们先按照 Chart 仓库的说明来快速部署一下…